设计模式[11]-Visitor

Type: Behavioral

Visitor: Visitor提供要对对象结构中元素执行的操作。让你可以在不修改其操作的元素的情况下定义新操作。在元素类型很少改变的情况下适用。

#include <iostream>
using namespace std;

class ConcreteElementA;
class ConcreteElementB;
class Visitor
{
public:
    virtual void visitElementA(ConcreteElementA* a) = 0;
    virtual void visitElementB(ConcreteElementB* b) = 0;
};

class Element
{
public:
    virtual void accept(Visitor* v)=0;
};

class ConcreteVisitor: public Visitor
{
public:
    void visitElementA(ConcreteElementA* a)
    {
        cout<<"visitElementA"<<endl;
    };
    void visitElementB(ConcreteElementB* b)
    {
        cout<<"visitElementB"<<endl;
    };
};

class ConcreteElementA: public Element
{
public:
    void accept(Visitor* v)
    {
        v->visitElementA(this);
    };
};

class ConcreteElementB: public Element
{
public:
    void accept(Visitor* v)
    {
        v->visitElementB(this);
    };
};

int main()
{
    Visitor *pVisitor = new ConcreteVisitor;
    Element *pElement  = new ConcreteElementA;

    pElement->accept(pVisitor);

    pElement = new ConcreteElementB;
    pElement->accept(pVisitor);

    system("pause");
    return 0;
}
时间: 2024-10-29 23:09:02

设计模式[11]-Visitor的相关文章

C#设计模式(11)——外观模式(Facade Pattern)

原文:C#设计模式(11)--外观模式(Facade Pattern) 一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 "门面"模式.下面就具体介绍下外观模式. 二.外观模式的详细介绍 2.1 定义 外观模式提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用.使用外观模式时,我们创建了一个统一的

Java设计模式之Visitor模式

Visitor定义 作用于某个对象群中各个对象的操作.它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作. 在Java中,Visitor模式实际上是分离了collection结构中的元素和对这些元素进行操作的行为. 为何使用Visitor? Java的Collection(包括Vector和Hashtable)是我们最经常使用的技术,可是Collection好象是个黑色大染缸,本来有各种鲜明类型特征的对象一旦放入后,再取出时,这些类型就消失了.那么我们势必要用If来判断,如: I

C#设计模式之Visitor设计模式(访问者设计模式)

一.访问者(Visitor)模式 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变. 问题提出 System.Collection命名空间下提供了大量集合操作对象.但大多数情况下处理的都是同类对象的聚集.换言之,在聚集上采取的操作都是一些针对同类型对象的同类操作.但是如果针对一个保存有不同类型对象的聚集采取某种操作该怎么办呢? 粗看上去,这似乎不是什么难题.可是如果需要针对一个包含不同类型元素的聚集采取某种操作,而操作的细

设计模式——11组合模式(Composite)

11.组合模式(Composite)组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便. 直接来看代码:[java] view plaincopy public class TreeNode { private String name; private TreeNode parent; private Vector children = new Vector(); public TreeNode(String name){ this.name = name; } public St

Java设计模式学习心得

整个设计模式贯穿一个原理:面对介面编程,而不是面对实现,(面向物件编程应该改爲面向介面编程).目标原则是:降低耦合,增强灵活性. 一.创建模式 1.设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁. 2.设计模式之Prototype(原型) 用原型实例指定创建物件的种类,並且通过拷贝这些原型创建新的物件. 3.设计模式之Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件複杂的工作,Builder模式就是将这两种情况分开进行

关于java问题-java编程思想的23种设计模式有哪些

问题描述 java编程思想的23种设计模式有哪些 例如,单例设计模式其它就不知道了?可以的话在给个例子描述一下 解决方案 根据caozhy的提示,再整理一下 1. Memento(备忘录) 2. Chain of Responsibility(责任链) 3. Observer(观察者 4. Command(命令模式) 5. State(状态模式) 6. Interpreter(解释器 7. Strategy(策略模式) 8. Iterator(迭代子 9. Template Method(模板方

设计模式(Patterns in Java)

设计 板桥里人的设计模式讲解是国内媒体(包括书籍和网站)中最早的成体系介绍,本系列介绍纯为免费传播(转载本站文章,请保留作者和网址),尽量做到言简意赅,通俗易懂,但是难免有所疏漏敬请来信或论坛讨论,不断完善. 真正掌握设计模式需要在实践中不断研究和使用,关于设计模式在具体实例的应用,可以阅读板桥里人的书籍<Java实用系统开发指南>.书籍中8个实例都从设计模式.框架等高度对系统进行崭新的设计和实现,这种应用理念正是现在以及将来软件设计和编程的根本之道. 1:前言 学习GoF设计模式的重要性 建

设计模式(Design Patterns)总结归纳

创建型模式 1 AbstractFactory 抽象工厂 关键词:多套方案 意图:提供一个创建多套(每套有相应的一群对象)的方法 适用情况:1.一个系统由多个产品系列中的一个来配置2.强调一系列相关的产品设计. 结构:   这里面AbstractFactory是抽象工厂,下面的两个是每套方案的工厂,每种工厂有相同的虚函数接口用来创建对象,也可以用于从文件读入配置来创建,右面的部分是产品,每个产品派生了在各套方案中不同的实现. 例子:创建不同的界面方案 Windows* w=new Windows

Head First Design Patterns

    在更大的计划之前,先温习一下Design Pattern的功课.    看了<Head First Design Patterns>里讲Decorator的样章,发现JOLT大奖不是白拿的,叙事能力之强,表达之清晰,不是那些满腹经伦的老先生可以比的.而且整个Pattern的讲述过程循序渐进,真的可以保证--小白都能学会设计模式.    可惜就只有样章.Head First系列的电子书都不好找,只好还是翻出老先生们的书来看.    这次温习很快做完,其实GOF80%的模式,都是基于一个原