博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 设计模式 —— 訪问者(Visitor)
阅读量:5843 次
发布时间:2019-06-18

本文共 1460 字,大约阅读时间需要 4 分钟。

訪问者设计模式的实现借助于两个继承体系,

  • (1)elements:一个是被操作的类(基类及其子类)
  • (2)visitors:一个定义了一系列操作的訪问者(基类及其子类)

訪问者模式是一种行为型设计模式(behavioral design pattern),被用于为一个树形结构(Node、LeafNode、InternalNode)中的 elements 添加操作。使用訪问者设计模式,我们不需在 elements 类内部编写相关成员函数实现功能,而是将操作定义在另外的一个类的继承体系中,也即 Visitors。(实现了一种分离?)

20160328214432620

class LeafNode;class InternalNode;class Visitor{public:    virtual ~Visitor(){}    virtual void visit(const LeafNode&)  = 0;    virtual void visit(const InternalNode&)  = 0;};class PrintVisitor:public Visitor{public:    void visit(const LeafNode&)    {        cout << "visiting a leafnode " << endl;    }    void visit(const InternalNode&)    {        cout << "visiting an internal node" << endl;    }};class Node{public:    virtual ~Node(){}    virtual void accept(Visitor& v) = 0;};class LeafNode:public Node{public:    void accept(Visitor& v)    {        v.visit(*this);    }};class InternalNode :public Node{public:    void accept(Visitor& v)    {        v.visit(*this);        for (const auto& elem : _data)            elem->accept(v);    }    void add(Node* pn)    {        _data.push_back(pn);    }private:    vector
_data;};

client代码:

LeafNode lna;LeafNode lnb;LeafNode lnc;InternalNode in1;InternalNode in2;in1.add(&lna);in1.add(&in2);in2.add(&lnb);in2.add(&lnc);PrintVisitor pv;in1.accept(pv);

执行结果:

visiting an internal nodevisiting a leafnodevisiting an internal nodevisiting a leafnodevisiting a leafnode

转载于:https://www.cnblogs.com/yutingliuyl/p/7344164.html

你可能感兴趣的文章
在51CTO三年年+了,你也来晒晒
查看>>
js控制图片等比例缩放
查看>>
Java高级开发工程师面试考纲
查看>>
FreeMarker表达式
查看>>
Debian9.2 下使用vnstat查看服务器带宽流量统计
查看>>
NGINX + PHP-FPM 502
查看>>
Openstack API常用命令
查看>>
OpenSSL漏洞凶猛来袭 慧眼恶意代码监测应对有方
查看>>
C语言 喝汽水问题
查看>>
ubuntu 下安装 mysql
查看>>
关于k-means聚类算法的matlab实现
查看>>
一键安装Gitlab后的备份、迁移与恢复
查看>>
因为本人工作繁忙,精力有限,本博客停止更新。有兴趣的博友可以关注我在CSDN上的主博客...
查看>>
SQL server查看触发器是否被禁用
查看>>
跟随我在oracle学习php(8)
查看>>
UVA-10212 The Last Non-zero Digit. 分解质因子+容斥定理
查看>>
求两个集合的交集,并集,差集
查看>>
Kotlin的语法糖(一)基础篇
查看>>
OkHttp源码分析
查看>>
NS_OPTIONS枚举的用法
查看>>