设计模式 - Visitor 模式(访问者模式)
UML结构图:
代码实现:
2 #ifndef VISITOR_H
3 #define VISITOR_H
4
5 class Visitor;
6
7 class Element
8 {
9 public:
10 virtual ~Element(){}
11
12 virtual void Accept(Visitor &rVisitor) = 0;
13
14 protected:
15 Element(){}
16 };
17
18 class ConcreateElementA
19 : public Element
20 {
21 public:
22 virtual ~ConcreateElementA() {}
23
24 virtual void Accept(Visitor &rVisitor);
25 };
26
27 class ConcreateElementB
28 : public Element
29 {
30 public:
31 virtual ~ConcreateElementB() {}
32
33 virtual void Accept(Visitor &rVisitor);
34 };
35
36 class Visitor
37 {
38 public:
39 virtual ~Visitor(){}
40
41 virtual void VisitConcreateElementA(ConcreateElementA *pConcreateElementA) = 0;
42 virtual void VisitConcreateElementB(ConcreateElementB *pConcreateElementB) = 0;
43
44 protected:
45 Visitor(){}
46 };
47
48 class ConcreateVisitorA
49 : public Visitor
50 {
51 public:
52 virtual ~ConcreateVisitorA(){}
53
54 virtual void VisitConcreateElementA(ConcreateElementA *pConcreateElementA);
55 virtual void VisitConcreateElementB(ConcreateElementB *pConcreateElementB);
56 };
57
58 class ConcreateVisitorB
59 : public Visitor
60 {
61 public:
62 virtual ~ConcreateVisitorB(){}
63
64 virtual void VisitConcreateElementA(ConcreateElementA *pConcreateElementA);
65 virtual void VisitConcreateElementB(ConcreateElementB *pConcreateElementB);
66 };
67
68 #endif
69
2 #include "Visitor.h"
3 #include <iostream>
4
5 void ConcreateElementA::Accept(Visitor &rVisitor)
6 {
7 rVisitor.VisitConcreateElementA(this);
8 }
9
10 void ConcreateElementB::Accept(Visitor &rVisitor)
11 {
12 rVisitor.VisitConcreateElementB(this);
13 }
14
15 void ConcreateVisitorA::VisitConcreateElementA(ConcreateElementA *pConcreateElementA)
16 {
17 std::cout << "VisitConcreateElementA By ConcreateVisitorA\n";
18 }
19
20 void ConcreateVisitorA::VisitConcreateElementB(ConcreateElementB *pConcreateElementA)
21 {
22 std::cout << "VisitConcreateElementB By ConcreateVisitorA\n";
23 }
24
25 void ConcreateVisitorB::VisitConcreateElementA(ConcreateElementA *pConcreateElementA)
26 {
27 std::cout << "VisitConcreateElementA By ConcreateVisitorB\n";
28 }
29
30 void ConcreateVisitorB::VisitConcreateElementB(ConcreateElementB *pConcreateElementA)
31 {
32 std::cout << "VisitConcreateElementB By ConcreateVisitorB\n";
33 }
34
2 #include "Visitor.h"
3
4 int main()
5 {
6 Visitor *pVisitorA = new ConcreateVisitorA();
7 Element *pElement = new ConcreateElementA();
8
9 pElement->Accept(*pVisitorA);
10
11 delete pElement;
12 delete pVisitorA;
13
14 return 0;
15 }
16
转载于:https://www.cnblogs.com/whiteyun/archive/2010/12/05/1896928.html
设计模式 - Visitor 模式(访问者模式)相关推荐
- 设计模式学习之访问者模式
访问者模式,是行为型设计模式之一.访问者模式是一种将数据操作与数据结构分离的设计模式,它可以算是 23 中设计模式中最复杂的一个,但它的使用频率并不是很高,大多数情况下,你并不需要使用访问者模式,但是 ...
- 【Java设计模式】:行为型模式—访问者模式
1. 访问者模式简介 访问者模式,是行为型设计模式之一.访问者模式是一种将数据操作与数据结构分离的设计模式,它可以算是 23 中设计模式中最复杂的一个,但它的使用频率并不是很高,大多数情况下,你并不需 ...
- Visitor(访问者模式)
名 称 Visitor(访问者模式) 意 图 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 适 用 环 境 u ...
- visitor java_访问者模式(Visitor)_java实现
// 20210202 写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现访问者模式 访问者模式核心思想 网上找的帖子都说访问者模式是最复杂的一个模式, ...
- 设计模式学习之访问者模式(Visitor,行为型模式)(21)
参考:https://www.cnblogs.com/edisonchou/p/7247990.html 在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根 ...
- 《研磨设计模式》chap25 访问者模式Visitor(3)联合组合模式+总结
1. 联合组合模式 //抽象的组件对象,相当于访问者模式中的元素对象 public abstract class Component {//接受访问者的访问 public abstract void ...
- 《研磨设计模式》chap25 访问者模式Visitor(2)模式应用到场景
1. 实现 //各种客户的父类 public abstract class Customer { private String customerId;// 客户编号 private String na ...
- 《研磨设计模式》chap25 访问者模式Visitor(1)模式介绍
场景:给用户做服务,分为个人用户.企业用户,服务不断地变. 1. 正常编码(不使用模式) public abstract class Customer {private String customer ...
- Net设计模式实例之访问者模式(Visitor Pattern)
一.访问者模式简介(Brief Introduction) 表示一个作用于某对象结构中的元素操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作,它把数据结构和作用于结构上的操作之间的耦 ...
- C#设计模式系列:访问者模式(Visitor)
1.访问者模式简介 1.1>.定义 作用于某个对象群中各个对象的操作,可以使在不改变对象本身的情况下,定义作用于对象的新操作. 1.2>.使用频率 低 2.访问者模式结构 2.1> ...
最新文章
- 高可用软件heartbeat服务章节目录(草稿)
- 免费网络推广浅析对网站首页优化的注意细节把控!
- 比亚迪秦wince玩游戏_【新闻】1.5T比亚迪秦Pro或要降价/多款亲民新车上市!
- redux-form(V7.4.2)笔记(二)
- statistic在c语言中的作用,模型评价除了C-statistic,还能用什么指标?
- postgresql分割字符串_postgresql 实现字符串分割字段转列表查询
- day4--numpy
- mongodb查询分页优化(二)
- win10中的depends walker不兼容问题
- 汇编语言跳转指令总结
- 微处理器 微型计算机 单片机之间有何区别,微处理器、微计算机、微处理机、CPU、单片机、嵌入式处理器它们之间有什么区别?...
- ARM、单片机、stm32、51单片机、和开发板的概念、区别及包含关系
- 新加坡国立大学计算机学院师资,我系教师刘志刚赴新加坡国立大学访学
- 数据库cosc2406-2407辅导week10-quiz-Transactions and Concurrency
- 以某SCI期刊为例说明该期刊投稿须知和流程
- 这几年被分布式坑惨了,曝光十大坑
- Css Reset -Css样式重置
- python画公主_【图片】来几张公主的手绘【勇敢的公主吧】_百度贴吧
- 【转】什么是预研?产品预研与技术预研
- Project Treble是Android升级的最终方案吗?