3_9 VisitorMode 访问者模式
生活随笔
收集整理的這篇文章主要介紹了
3_9 VisitorMode 访问者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 定義:表示一個作用于某個對象元素結構中的個元素操作,它使
// 你可以在不改變元素類的前提下定義作用于這些元素的新操作
//
// 模式舉例:小酒樓有掌柜的,老板,老板娘,有收入賬本和支出賬本
// 不同人看同一賬本由于權限不同看到的內容也不同
//
// 模式特點:
//
//#include<iostream>
#include<string>using namespace std;class ZhangBen;
class ShouRuZhangBen;
class ZhiChuZhangBen;class LingDao
{
public://感覺也可以不重載,只寫一個最上層的,然后動態識別virtual void visit(ZhangBen * z)=0;virtual void visit(ShouRuZhangBen * z)=0;virtual void visit(ZhiChuZhangBen * z)=0;
};class ZhangBen
{
public:virtual void accept(LingDao * l)=0;
};class ShouRuZhangBen : public ZhangBen
{
public:virtual void accept(LingDao * l){l->visit(this);}void showAll(){cout <<"收入賬本,查看全部"<<endl;}void showPart(){cout <<"收入賬本,只能查看一部分"<<endl;}
};class ZhiChuZhangBen : public ZhangBen
{
public:virtual void accept(LingDao * l){l->visit(this);}void showAll(){cout <<"支出賬本,查看全部"<<endl;}void showPart(){cout <<"支出賬本,只能查看一部分"<<endl;}
};class ZhangGui : public LingDao
{
public:virtual void visit(ZhangBen * z){}virtual void visit(ShouRuZhangBen * z){cout<<"掌柜來訪,";z->showPart();}virtual void visit(ZhiChuZhangBen * z){cout<<"掌柜來訪,";z->showPart();}
};class LaoBan : public LingDao
{
public:virtual void visit(ZhangBen * z){}virtual void visit(ShouRuZhangBen * z){cout<<"老板來訪,";z->showAll();}virtual void visit(ZhiChuZhangBen * z){cout<<"老板來訪,";z->showAll();}
};int main()
{LaoBan * pLaoBan = new LaoBan();ZhangGui * pZhangGui = new ZhangGui();ShouRuZhangBen * pShouRuZhangBen = new ShouRuZhangBen();//最后采用accept的方式調用pShouRuZhangBen->accept(pLaoBan);pShouRuZhangBen->accept(pZhangGui);return 0;
}
?
總結
以上是生活随笔為你收集整理的3_9 VisitorMode 访问者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3_8 StateMode 状态模式
- 下一篇: 3_10 MediaMode 中介者模式