9.访问者模式

简介: 1访问者模式的核心内容是: A:父类中存储一个作为关键字的变量。 B:子类根据这个关键的不同做不同的操作。 C:在访问的时候不用关心具体的内部实现方式,通过调用得出结论接口就可以得出结论。 2访问者模式的作用:送多个妹子花时,通过访问者模式实现根据特点做不同的配对。 3访问者模式具体描述 访问者模式:访问者模式的目的是封装一些施加于某种数据结构元素之

1访问者模式的核心内容是:

A:父类中存储一个作为关键字的变量。

B:子类根据这个关键的不同做不同的操作。

C:在访问的时候不用关心具体的内部实现方式,通过调用得出结论接口就可以得出结论。

2访问者模式的作用:送多个妹子花时,通过访问者模式实现根据特点做不同的配对。

3访问者模式具体描述

访问者模式:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。

一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。

访问者模式适用于数据结构相对未定的系统,

它把数据结构和作用于结构上的操作之间的耦合解脱开,

使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易,

就是增加一个新的访问者类。

访问者模式将有关的行为集中到一个访问者对象中,

而不是分散到一个个的节点类中。当使用访问者模式时,

要将尽可能多的对象浏览逻辑放在访问者类中,而不是放到它的子类中。

访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。

 

情人节到了,要给每个MM送一束鲜花和一张卡片,

可是每个MM送的花都要针对她个人的特点,每张卡片也要根据个人的特点来挑,

我一个人哪搞得清楚,还是找花店老板和礼品店老板做一下Visitor

让花店老板根据MM的特点选一束花,让礼品店老板也根据每个人特点选一张卡,

这样就轻松多了。。

4.访问者模式类图

5.代码:

#include<iostream>

#include <list>

#include <string>

using namespace std;

//访问者模式:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。

//一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。

//访问者模式适用于数据结构相对未定的系统,

//它把数据结构和作用于结构上的操作之间的耦合解脱开,

//使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易,

//就是增加一个新的访问者类。

//访问者模式将有关的行为集中到一个访问者对象中,

//而不是分散到一个个的节点类中。当使用访问者模式时,

//要将尽可能多的对象浏览逻辑放在访问者类中,而不是放到它的子类中。

//访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。

 

//情人节到了,要给每个MM送一束鲜花和一张卡片,

//可是每个MM送的花都要针对她个人的特点,每张卡片也要根据个人的特点来挑,

//我一个人哪搞得清楚,还是找花店老板和礼品店老板做一下Visitor

//让花店老板根据MM的特点选一束花,让礼品店老板也根据每个人特点选一张卡,

//这样就轻松多了。

 

//访问者模式不需要改变基类,不依赖虚函数

class Person

{

public:

    char * action;

    //获得结论

    virtual void getConclusion()

    {

    };

};

 

class Man :public Person

{

public:

    void getConclusion()

    {

        if (action == "成功")

        {

            cout << "男人成功时,背后多半有一个伟大的女人。" << endl;

        }

        else if (action == "恋爱")

        {

            cout << "男人恋爱时,凡事不懂装懂。" << endl;

        }

    }

};

 

class Woman :public Person

{

public:

    void getConclusion()

    {

        if (action == "成功")

        {

            cout << "女人成功时,背后多半有失败的男人。" << endl;

        }

        else if (action == "恋爱")

        {

            cout << "女人恋爱时,遇到事懂也装不懂。" << endl;

        }

    }

};

 

int main()

{

    list<Person*> persons;

 

    Person *man1 = new Man();

    man1->action = "成功";

    persons.push_back(man1);

 

    Person *woman1 = new Woman();

    woman1->action = "成功";

    persons.push_back(woman1);

 

    Person *man2 = new Man();

    man2->action = "恋爱";

    persons.push_back(man2);

 

    Person *woman2 = new Woman();

    woman2->action = "恋爱";

    persons.push_back(woman2);

 

    list<Person*>::iterator iter = persons.begin();

    while (iter != persons.end())

    {

        (*iter)->getConclusion();

        ++iter;

    }

 

    cin.get();

    return 0;

}

运行结果如下:


目录
相关文章
|
3月前
|
设计模式 Java 容器
聊聊Java设计模式-访问者模式
访问者模式(Visitor Pattern)指将作用域某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作。
27 3
|
4月前
|
算法
行为型 访问者模式
行为型 访问者模式
17 0
|
4月前
|
设计模式 uml C++
行为型 迭代器模式
行为型 迭代器模式
20 0
|
5月前
访问者模式
访问者模式
30 0
访问者模式
|
8月前
|
设计模式 Java uml
|
9月前
|
设计模式 Java 关系型数据库
访问者模式解读
访问者模式解读
|
10月前
今天说说你不知道的访问者模式
今天说说你不知道的访问者模式
54 0
|
设计模式 程序员
访问者模式是啥?咋实现呀?
访问者模式是啥?咋实现呀?
|
设计模式 Java Spring
Java设计模式 ->访问者模式
Java设计模式 ->访问者模式
76 0
|
设计模式
我学会了,访问者模式
访问者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
88 0
我学会了,访问者模式