设计模式-行为-访问者
来源:互联网 发布:淘宝网打底羊毛衫 编辑:程序博客网 时间:2024/05/21 05:44
#pragma once#ifndef VISITOR_H #define VISITOR_H class Visitor; class Element { public: virtual ~Element(){} virtual void Accept(Visitor &rVisitor) = 0; protected: Element(){} }; class ConcreateElementA : public Element { public: virtual ~ConcreateElementA() {} virtual void Accept(Visitor &rVisitor); }; class ConcreateElementB : public Element { public: virtual ~ConcreateElementB() {} virtual void Accept(Visitor &rVisitor); }; class Visitor { public: virtual ~Visitor(){} virtual void VisitConcreateElementA(ConcreateElementA *pConcreateElementA) = 0; virtual void VisitConcreateElementB(ConcreateElementB *pConcreateElementB) = 0; protected: Visitor(){} }; class ConcreateVisitorA : public Visitor { public: virtual ~ConcreateVisitorA(){} virtual void VisitConcreateElementA(ConcreateElementA *pConcreateElementA); virtual void VisitConcreateElementB(ConcreateElementB *pConcreateElementB); }; class ConcreateVisitorB : public Visitor { public: virtual ~ConcreateVisitorB(){}virtual void VisitConcreateElementA(ConcreateElementA *pConcreateElementA); virtual void VisitConcreateElementB(ConcreateElementB *pConcreateElementB); }; #endif
#include "StdAfx.h"#include "visitor_impl.h"#include <iostream> void ConcreateElementA::Accept(Visitor &rVisitor) { rVisitor.VisitConcreateElementA(this); } void ConcreateElementB::Accept(Visitor &rVisitor) { rVisitor.VisitConcreateElementB(this); } void ConcreateVisitorA::VisitConcreateElementA(ConcreateElementA *pConcreateElementA){ std::cout << "VisitConcreateElementA By ConcreateVisitorA\n"; } void ConcreateVisitorA::VisitConcreateElementB(ConcreateElementB *pConcreateElementA) { std::cout << "VisitConcreateElementB By ConcreateVisitorA\n"; } void ConcreateVisitorB::VisitConcreateElementA(ConcreateElementA *pConcreateElementA) { std::cout << "VisitConcreateElementA By ConcreateVisitorB\n"; } void ConcreateVisitorB::VisitConcreateElementB(ConcreateElementB *pConcreateElementA) { std::cout << "VisitConcreateElementB By ConcreateVisitorB\n"; }
// Visitor.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "visitor_impl.h"#include <stdlib.h>//表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. //实现了"双分派"的概念,一个操作(Accept)既依赖于执行操作的具体类型(Element *)有依赖于操作传入参数的类型(Visitor *)int _tmain(int argc, _TCHAR* argv[]){Visitor *pVisitor1 = new ConcreateVisitorA(); Visitor *pVisitor2 = new ConcreateVisitorB();Element *pElementA = new ConcreateElementA(); pElementA->Accept(*pVisitor1); pElementA->Accept(*pVisitor2); Element *pElementB = new ConcreateElementB();pElementB->Accept(*pVisitor1); pElementB->Accept(*pVisitor2); delete pElementA; delete pElementB; delete pVisitor1;delete pVisitor2;system("pause");return 0;}
阅读全文
0 0
- 设计模式-行为-访问者
- 设计模式---行为类型---访问者
- 设计模式--访问者模式(行为类模式)
- 设计模式 - 行为型模式 - 访问者模式
- 设计模式->行为型模式->访问者模式
- 设计模式--行为型--访问者模式
- 设计模式18:访问者模式【行为型】
- [设计模式-行为型]访问者模式(Vistor)
- 行为设计模式---访问者模式(Visitor)
- 设计模式-行为型之访问者模式
- 【设计模式】行为模式之Visitor访问者
- 行为型设计模式-访问者模式
- 设计模式-行为性设计模式:访问者模式 Visitor
- 行为模式-访问者模式
- 行为模式-访问者模式
- 访问者模式 - 行为模式
- 设计模式深入学习--Visitor 访问者模式(行为型模式)
- Java设计模式之行为型模式(访问者模式)
- 国庆技术博客之接口回调
- flex弹性布局学习
- JAVA8
- 一款可调速率的音乐播放器
- webApp介绍webApp介绍
- 设计模式-行为-访问者
- ScrollView嵌套ListView冲突显示一个item
- 小白教程——Windows下用PHP写一个简单的登录注册页面(二)
- JZOJ 5400. 【NOIP2017提高A组模拟10.7】Repulsed
- 某小傻瓜致我~~
- STL stack
- Hibernate持久化类编写规则
- JAVA9
- IE浏览器支持响应式网站设计