青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術(shù)博客

感興趣領(lǐng)域:高性能服務(wù)器編程,存儲,算法,Linux內(nèi)核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數(shù)據(jù)加載中……

常見設(shè)計模式的解析和實現(xiàn)(C++)之二十-Visitor模式

作用:
表示一個作用于某對象結(jié)構(gòu)中的各元素的操作.它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作.

UML結(jié)構(gòu)圖:


解析:
Visitor模式把對結(jié)點的訪問封裝成一個抽象基類,通過派生出不同的類生成新的訪問方式.在實現(xiàn)的時候,在visitor抽象基類中聲明了對所有不同結(jié)點進行訪問的接口函數(shù),如圖中的VisitConcreateElementA函數(shù)等,這樣也造成了Visitor模式的一個缺陷--新加入一個結(jié)點的時候都要添加Visitor中的對其進行訪問接口函數(shù),這樣使得所有的Visitor及其派生類都要重新編譯了,也就是說Visitor模式一個缺點就是添加新的結(jié)點十分困難.另外,還需要指出的是Visitor模式采用了所謂的"雙重分派"的技術(shù),拿上圖來作為例子,要對某一個結(jié)點進行訪問,首先需要產(chǎn)生一個Element的派生類對象,其次要傳入一個Visitor類派生類對象來調(diào)用對應(yīng)的Accept函數(shù),也就是說,到底對哪種Element采用哪種Visitor訪問,需要兩次動態(tài)綁定才可以確定下來,具體的實現(xiàn)可以參考下面實現(xiàn)代碼中的Main.cpp部分是如何調(diào)用這些類的.

實現(xiàn):
1)Visitor.h
/********************************************************************
????created:????2006/08/09
????filename:?????Visitor.h
????author:????????李創(chuàng)
????????????????
http://www.shnenglu.com/converse/

????purpose:????Visitor模式的演示代碼
********************************************************************
*/


#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
?

2)Visitor.cpp
/********************************************************************
????created:????2006/08/09
????filename:?????Visitor.cpp
????author:????????李創(chuàng)
????????????????
http://www.shnenglu.com/converse/

????purpose:????Visitor模式的演示代碼
********************************************************************
*/


#include?
"Visitor.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";
}


3)Main.cpp
/********************************************************************
????created:????2006/08/09
????filename:?????Main.cpp
????author:????????李創(chuàng)
????????????????
http://www.shnenglu.com/converse/

????purpose:????Visitor模式的測試代碼
********************************************************************
*/


#include?
"Visitor.h"

int?main()
{
????Visitor?
*pVisitorA?=?new?ConcreateVisitorA();
????Element?
*pElement??=?new?ConcreateElementA();

????pElement
->Accept(*pVisitorA);

????delete?pElement;
????delete?pVisitorA;

????
return?0;
}

posted on 2006-08-10 10:03 那誰 閱讀(4254) 評論(3)  編輯 收藏 引用 所屬分類: 設(shè)計模式

評論

# re: 常見設(shè)計模式的解析和實現(xiàn)(C++)之二十-Visitor模式   回復(fù)  更多評論   

呵,有沒有模式的講稿,最近要講設(shè)計模式,懶得去寫講稿。
2006-08-20 20:07 | absurd

# re: 常見設(shè)計模式的解析和實現(xiàn)(C++)之二十-Visitor模式   回復(fù)  更多評論   

@absurd
我把這一系列的文章作了一個打包在這里:
http://www.shnenglu.com/converse/archive/2006/08/14/11139.html#11220
你看看有沒有幫助,講稿的話我沒有,從來沒有做過講師:)
2006-08-20 20:39 | 創(chuàng)系

# re: 常見設(shè)計模式的解析和實現(xiàn)(C++)之二十-Visitor模式   回復(fù)  更多評論   

謝謝
2006-08-30 12:29 | absurd
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区在线观看视频| 亚洲日本国产| 欧美一区二区精品久久911| 久久激情五月婷婷| 在线高清一区| 欧美精品日韩一区| 99在线精品视频| 欧美一区视频| 亚洲电影av| 欧美午夜一区二区三区免费大片 | 久久国产福利| 在线看一区二区| 欧美日韩精品一区二区| 亚洲欧美在线免费观看| 欧美 日韩 国产一区二区在线视频 | 欧美福利一区二区| 在线视频日韩| 国产综合欧美在线看| 欧美成人免费网站| 亚洲色图综合久久| 蜜臀av一级做a爰片久久| 99亚洲精品| 国产原创一区二区| 欧美日韩国产不卡| 欧美怡红院视频| 日韩午夜三级在线| 免费人成网站在线观看欧美高清 | 亚洲国产欧美在线| 午夜精品视频在线观看| 亚洲全部视频| 国内久久婷婷综合| 欧美三日本三级三级在线播放| 香蕉久久国产| 一本到12不卡视频在线dvd| 久久天堂精品| 欧美一级视频一区二区| 亚洲理论在线观看| 激情丁香综合| 国产精品视频免费| 欧美精品激情| 久久视频免费观看| 亚洲欧美一区二区在线观看| 亚洲欧洲精品一区二区| 美国三级日本三级久久99| 亚洲欧美成人一区二区在线电影| 亚洲成人在线网站| 国产农村妇女毛片精品久久莱园子| 嫩草影视亚洲| 久久精视频免费在线久久完整在线看| 一区二区三区 在线观看视频| 欧美成人中文| 男人插女人欧美| 久久久青草婷婷精品综合日韩| 亚洲一二三四区| 日韩小视频在线观看| 亚洲第一偷拍| 在线欧美三区| 在线播放日韩欧美| 影音先锋日韩精品| 韩日欧美一区二区三区| 国产色产综合色产在线视频| 国产精品一区二区在线观看不卡| 欧美午夜免费影院| 欧美性天天影院| 国产精品久久久久久一区二区三区 | 日韩视频免费观看高清在线视频 | 久久中文精品| 麻豆亚洲精品| 欧美α欧美αv大片| 免费成人黄色av| 欧美国产精品中文字幕| 欧美国产亚洲精品久久久8v| 欧美 日韩 国产精品免费观看| 老司机67194精品线观看| 欧美三区美女| 男人插女人欧美| 欧美成人免费全部| 欧美精品在线免费观看| 欧美日本韩国在线| 欧美日韩精品综合| 国产精品第十页| 国产日产欧产精品推荐色 | 欧美在线视频免费观看| 欧美中文字幕| 裸体素人女欧美日韩| 欧美jjzz| 欧美日韩亚洲一区在线观看| 国产精品久久久久久影视 | 性感少妇一区| 久久久人成影片一区二区三区观看 | 欧美激情精品久久久六区热门 | 欧美日韩亚洲一区二区| 国产精品久久久久毛片大屁完整版| 国产精品毛片a∨一区二区三区|国 | 99精品99久久久久久宅男| 99伊人成综合| 欧美一区二区三区免费观看| 另类天堂av| 最新69国产成人精品视频免费| 一本久道久久综合婷婷鲸鱼| 性久久久久久久久| 欧美波霸影院| 国产精品进线69影院| 狠狠久久综合婷婷不卡| 一区二区三区高清视频在线观看| 亚洲欧美国产高清| 米奇777在线欧美播放| 亚洲人精品午夜在线观看| 亚洲线精品一区二区三区八戒| 欧美在线免费播放| 欧美激情自拍| 国产夜色精品一区二区av| 亚洲精品系列| 久久精品国产综合精品| 亚洲电影下载| 香蕉久久夜色精品国产| 欧美激情91| 狠狠色狠狠色综合日日tαg | 亚洲国产成人不卡| 亚洲女性裸体视频| 欧美成人精品激情在线观看 | 亚洲黄色成人| 久久精品日韩欧美| 欧美三日本三级三级在线播放| 激情久久一区| 欧美一区在线直播| 亚洲国产精品一区制服丝袜| 午夜精品电影| 欧美性天天影院| 亚洲精品小视频| 欧美第一黄网免费网站| 欧美一级免费视频| 国产精品xvideos88| 亚洲美女电影在线| 美女图片一区二区| 羞羞答答国产精品www一本| 欧美日韩精品系列| 亚洲卡通欧美制服中文| 美脚丝袜一区二区三区在线观看 | 久久久91精品国产| 国产精品蜜臀在线观看| 一二三区精品| 亚洲精品少妇30p| 欧美成人综合网站| 亚洲日本成人网| 欧美激情国产高清| 开心色5月久久精品| 狠狠操狠狠色综合网| 久久国产精品一区二区| 亚洲午夜在线观看视频在线| 欧美日韩视频专区在线播放| 亚洲日本激情| 亚洲国产成人不卡| 欧美高清视频一区二区三区在线观看| 影音先锋成人资源站| 麻豆国产精品一区二区三区| 久久精品天堂| 伊人狠狠色j香婷婷综合| 久久综合给合| 久久婷婷综合激情| 亚洲高清成人| 亚洲高清成人| 欧美精品在线观看一区二区| 99精品国产热久久91蜜凸| 亚洲日本免费电影| 欧美美女操人视频| 亚洲线精品一区二区三区八戒| 99精品久久久| 国产伦精品一区二区三区免费| 欧美一区二区在线| 久久精品二区| 亚洲人成毛片在线播放女女| 亚洲第一精品久久忘忧草社区| 欧美黄色视屏| 亚洲在线1234| 欧美一级夜夜爽| 亚洲第一色在线| 亚洲精品日产精品乱码不卡| 国产精品国内视频| 久久久久se| 欧美风情在线| 亚洲主播在线观看| 久久国产精品色婷婷| 亚洲黄页视频免费观看| 亚洲精品美女在线| 国产精品区一区| 免费看成人av| 欧美日韩色婷婷| 久久久噜噜噜久噜久久| 欧美1区3d| 欧美一区二区三区另类| 久久精视频免费在线久久完整在线看| 亚洲国产专区| 亚洲午夜一区二区三区| 影音先锋另类| 亚洲一区二区黄色| 亚洲经典一区| 亚洲一区免费| 亚洲激情自拍| 欧美一区二区三区免费看|