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

那誰的技術博客

感興趣領域:高性能服務器編程,存儲,算法,Linux內核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數據加載中……

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

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

UML結構圖:


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

實現:
1)Visitor.h
/********************************************************************
????created:????2006/08/09
????filename:?????Visitor.h
????author:????????李創
????????????????
http://m.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:????????李創
????????????????
http://m.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:????????李創
????????????????
http://m.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 那誰 閱讀(4244) 評論(3)  編輯 收藏 引用 所屬分類: 設計模式

評論

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

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

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

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

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

謝謝
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>
            久久精品中文字幕免费mv| 欧美在线免费视屏| 一本久久综合亚洲鲁鲁| 女女同性精品视频| 久久久久88色偷偷免费| 国产午夜精品一区二区三区视频 | 国语自产精品视频在线看抢先版结局 | 久久精品国产在热久久 | 亚洲第一页在线| 国产精品a久久久久久| 欧美三级在线视频| 性做久久久久久久免费看| 99热这里只有精品8| 国产精品理论片在线观看| 欧美一区二区三区在线看| 久久久久国产免费免费| 亚洲精品字幕| 欧美一区二区三区免费在线看 | 夜夜嗨一区二区| 国产精品视频久久一区| 久久天天躁夜夜躁狠狠躁2022| 久久婷婷色综合| 欧美一二区视频| 葵司免费一区二区三区四区五区| 99精品热6080yy久久| 欧美一区二区三区精品电影| 亚洲精品日韩综合观看成人91| 亚洲一区欧美二区| 亚洲另类一区二区| 玖玖玖国产精品| 欧美一区二区视频观看视频| 欧美激情一区二区三区高清视频| 欧美一级淫片aaaaaaa视频| 欧美精品久久99久久在免费线| 久久成人av少妇免费| 欧美高清视频| 亚洲国产日日夜夜| 韩国三级电影久久久久久| 亚洲欧美精品| 欧美在线免费视屏| 欧美wwwwww| 国内精品**久久毛片app| 欧美在线3区| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产一区二区日韩| 久久婷婷av| 亚洲国产高清在线| 日韩一级成人av| 国产精品久久久99| 欧美一区二区三区在线播放| 久久久91精品国产一区二区精品| 国产日韩欧美二区| 女同性一区二区三区人了人一| 亚洲国产天堂久久国产91| 99国产精品99久久久久久| 亚洲色图综合久久| 久久久精品视频成人| 亚洲国产成人av在线| 欧美日本在线看| 久久精品欧美日韩精品| 亚洲伦理一区| 噜噜爱69成人精品| 性欧美大战久久久久久久免费观看| 国产色视频一区| 国产精品高清在线| 欧美不卡视频一区发布| 亚洲自拍偷拍一区| 亚洲精品你懂的| 欧美jizzhd精品欧美巨大免费| 亚洲欧美日韩在线不卡| 亚洲精选成人| 1000部国产精品成人观看| 国产区二精品视| 国产情侣久久| 国产精品一区2区| 国产精品激情av在线播放| 欧美高清在线| 免费影视亚洲| 欧美好吊妞视频| 欧美精品99| 欧美激情性爽国产精品17p| 久久青草久久| 麻豆成人小视频| 欧美国产亚洲精品久久久8v| 欧美成人精品一区二区| 欧美韩日亚洲| 国产精品久久久久一区| 国产精品国产精品| 国产精品乱码一区二区三区| 国产精品日韩精品| 国产日韩精品综合网站| 国产在线视频欧美| 亚洲国产欧美久久| 一本色道久久综合亚洲精品高清| 亚洲毛片在线观看.| 亚洲午夜在线观看视频在线| 国产精品女主播一区二区三区| 国产精品毛片a∨一区二区三区|国| 国产精品视频| 亚洲精品久久在线| 久久久亚洲国产天美传媒修理工 | 久久精品夜夜夜夜久久| 美女国产一区| 亚洲五月六月| 欧美成人三级在线| 国产专区精品视频| 亚洲欧美美女| 日韩一级片网址| 欧美成人午夜| 亚洲国产天堂久久国产91| 亚洲欧美日韩精品久久奇米色影视| 麻豆成人精品| 久久免费视频在线观看| 国产日韩欧美精品在线| 亚洲性感美女99在线| 亚洲黄色影院| 欧美电影在线观看完整版| 一区在线观看| 欧美jjzz| 欧美成人久久| 日韩一二三区视频| 亚洲精品国产精品国自产观看 | 国产精品男人爽免费视频1| 99国产精品99久久久久久粉嫩| 欧美www视频| 欧美成人日韩| 亚洲一区二区三区国产| 亚洲综合久久久久| 韩国av一区二区三区在线观看| 久久久.com| 欧美精品v国产精品v日韩精品| 亚洲精选久久| 欧美亚洲综合在线| 亚洲国产视频一区| 中文欧美日韩| 久久福利视频导航| 在线日韩一区二区| 99re66热这里只有精品4| 国产欧美日韩伦理| 欧美二区在线| 国产精品美女午夜av| 免费成人高清| 国产精品日本一区二区 | 一区二区三区视频在线观看| 国产精品五月天| 欧美激情精品久久久久| 国产精品免费电影| 亚洲国产精品一区二区www| 国产精品啊v在线| 亚洲日本理论电影| 在线日韩成人| 久久精品亚洲一区二区| 亚洲在线不卡| 欧美日韩成人网| 欧美激情精品久久久久| 狠狠色丁香婷婷综合久久片| 亚洲综合色网站| 亚洲免费一在线| 欧美揉bbbbb揉bbbbb| 91久久黄色| 一区二区欧美视频| 欧美精品三区| 亚洲伦理在线| 亚洲自啪免费| 国产精品天美传媒入口| 亚洲午夜精品久久久久久app| 在线中文字幕日韩| 国产精品高清在线| 亚洲欧美国产三级| 久久久久久综合网天天| 激情六月综合| 欧美精品免费在线观看| 日韩午夜在线视频| 欧美在线看片a免费观看| 国产在线播精品第三| 免费成人毛片| 日韩小视频在线观看| 性欧美长视频| 91久久线看在观草草青青| 欧美日韩不卡在线| 欧美永久精品| 亚洲精品一区在线观看| 久久久久99精品国产片| 久久久久女教师免费一区| 亚洲精品国产欧美| 久久伊人精品天天| 亚洲专区一区二区三区| 国产在线视频不卡二| 欧美日韩在线播放三区| 久久久av网站| 午夜精品久久久久久久99樱桃| 欧美国产日韩一区二区| 欧美在线你懂的| 午夜欧美精品| 亚洲小说欧美另类社区| 亚洲精品一区二区在线| 国产日韩欧美在线看| 国产精品久久久久毛片软件| 欧美激情一二三区| 欧美大片免费观看|