日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

9.访问者模式

發布時間:2024/9/27 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9.访问者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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;

}

運行結果如下:



總結

以上是生活随笔為你收集整理的9.访问者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。