C++设计模式之访问者模式
简述
访问者模式(Visitor Pattern)表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。

代码实现:
// Visitor.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include<iostream>
#include<string>
#include <list>
using namespace std; class ParkElement;
class Visitor //不同的访问者 访问公园完成不同的动作
{
public:
virtual void visit(ParkElement *park) = ;
}; class ParkElement
{
public:
virtual void accpet(Visitor *v) = ;
}; class ParkA:public ParkElement
{
public:
virtual void accpet(Visitor *v)
{
v->visit(this);
}
}; class ParkB:public ParkElement
{
public:
virtual void accpet(Visitor *v)
{
v->visit(this);
}
}; class Park:public ParkElement //公园的部分可以进行集中管理
{
public:
Park()
{
m_list.clear();
}
void SetPart(ParkElement *e)
{
m_list.push_back(e);
}
void accept(Visitor *v)
{
for(list<ParkElement*>::iterator it = m_list.begin();it != m_list.end();it++)
{
(*it)->accpet(v);
}
}
private:
list<ParkElement *> m_list;
}; class VisitorA : public Visitor//访问者A
{
public:
virtual void visit(ParkElement *park){
cout << "清洁工A 访问 公园A 部分,打扫卫生完毕" << endl;}
}; class VisitorB : public Visitor//访问者B
{
public:
virtual void visit(ParkElement *park){
cout << "清洁工B 访问 公园B 部分,打扫卫生完毕" << endl;}
}; class VisitorManager : public Visitor//访问者管理员
{
public:
virtual void visit(ParkElement *park)
{ cout << "管理员 检查 此部分卫生情况" << endl;}
}; int _tmain(int argc, _TCHAR* argv[])
{
cout<<"访问者模式"<<endl;
VisitorA *visitorA = new VisitorA;//创建访问者A
VisitorB *visitorB = new VisitorB;//创建访问者B ParkA *partA = new ParkA;//创建数据结构 A
ParkB *partB = new ParkB;//创建数据结构 B partA->accpet(visitorA);
//公园接受访问者A访问 + 在这个函数中封装了visitorA去访问公园A部分 partB->accpet(visitorB); //公园接受访问者B访问 + 在这个函数中封装了visitorA去访问公园B部分 system("pause");
return ;
}
C++设计模式之访问者模式的更多相关文章
- 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
原文:乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) 作者:webabc ...
- 折腾Java设计模式之访问者模式
博客原文地址:折腾Java设计模式之访问者模式 访问者模式 Represent an operation to be performed on the elements of an object st ...
- C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi
C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...
- 北风设计模式课程---访问者模式(Visitor)
北风设计模式课程---访问者模式(Visitor) 一.总结 一句话总结: 设计模式是日常问题的经验总结方案,所以学好设计模式对日常出现的问题可以有很好的解决. 访问者设计模式有点神似 抽象工厂模式, ...
- JAVA设计模式之访问者模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述访问者(Visitor)模式的: 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要 ...
- C#设计模式(22)——访问者模式(Vistor Pattern)
一.引言 在上一篇博文中分享了责任链模式,责任链模式主要应用在系统中的某些功能需要多个对象参与才能完成的场景.在这篇博文中,我将为大家分享我对访问者模式的理解. 二.访问者模式介绍 2.1 访问者模式 ...
- JS常用的设计模式(8)——访问者模式
GOF官方定义: 访问者模式是表示一个作用于某个对象结构中的各元素的操作.它使可以在不改变各元素的类的前提下定义作用于这些元素的新操作.我们在使用一些操作对不同的 对象进行处理时,往往会根据不同的对象 ...
- [设计模式] 23 访问者模式 visitor Pattern
在GOF的<设计模式:可复用面向对象软件的基础>一书中对访问者模式是这样说的:表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.访问 ...
- 再起航,我的学习笔记之JavaScript设计模式22(访问者模式)
访问者模式 概念介绍 访问者模式(Visitor): 针对于对象结构中的元素,定义在不改变该对象的前提下访问结构中元素的新方法 解决低版本IE兼容性 我们来看下面这段代码,这段代码,我们封装了一个绑定 ...
- Head First设计模式之访问者模式
一.定义 定义:表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 访问者模式适用于数据结构相对稳定的系统, 它把数据结构和作用于数据结构之上的操 ...
随机推荐
- JavaScript 小知识
1.var 变量 <script type="text/javascript"> var a = "hong"; var fun = functio ...
- 伪类:after的使用以及结合attr来添加属性的技巧
本案例以实现侧边栏的效果为例来说明 直接上代码看效果: css <style type="text/css"> *{;;list-style: none;} ul{;t ...
- 【java工具类】java做的一个xml转Excel工具,基于maven工程
说明:适合数据库导出为xml时转成Excel 本工具将上传至GitHub:https://github.com/xiaostudy/xiaostudyAPI3 doc4j的maven依赖 <!- ...
- YOLOv2-darknet 内容解析
目录 YOLOv2-darknet 内容解析 1. 改进之处 2. Better 3. Faster 4. Stronger 5. 总结 reference YOLOv2-darknet 内容解析 1 ...
- 《算法竞赛入门经典》习题及反思 -<2>
数组 Master-Mind Hints,Uva 340 题目:给定答案序列和用户猜的序列,统计有多少数字对应正确(A),有多少数字在两个序列都出现过但位置不对. 输入包括多组数据.每组输入第一行为序 ...
- 机器学习-数据可视化神器matplotlib学习之路(一)
直接上代码吧,说明写在备注就好了,这次主要学习一下基本的画图方法和常用的图例图标等 from matplotlib import pyplot as plt import numpy as np #这 ...
- Java I/O学习——File
File我们出看可能会根据字面意思理解为文件,其实它既代表文件又代表目录. 这里有一个例子可以列出指定目录下的所有文件或目录, 以及我们可以过滤得到我们想要的文件 import java.io.Fil ...
- Intel微处理器学习笔记(一) 实模式内存结构
图一 奔腾概念示意图 存储系统一般划分为三个主要部分:TPA(transient program area),System Area和XMS(extended memory system). 图二 内 ...
- rospy 中service
Server部分: #!/usr/bin/env python import sys import os import rospy #from beginner.srv import * from b ...
- Topless eclipse导入myeclipse的web项目没法识别问题解决
1.进入项目目录,找到.project文件,打开. 2.找到<natures>...</natures>代码段. 3.在第2步的代码段中加入如下标签内容并保存: <nat ...