ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

访问者模式

2021-09-16 19:33:32  阅读:197  来源: 互联网

标签:visitor void pE 模式 accept pVist public 访问者


 

 

class Element
{
public:
Element(string str) :m_name(str) {}
virtual void accept(visitor * pVist) = 0;
string getName(void) { return m_name; }
private:
string m_name;
};

class concreteElementA : public Element
{
public:
concreteElementA(string str) : Element(str) {};
void accept(visitor* pVist);
};

class concreteElementB : public Element
{
public:
concreteElementB(string str , int number) : Element(str)
,mNumber(number){};
void accept(visitor* pVist);
int getNumber(void) { return mNumber; }
private:
int mNumber;
};

class visitor
{
public:
virtual void visitorElementA(concreteElementA* pE) = 0;
virtual void visitorElementB(concreteElementB* pE) = 0;
};

class vistorA : public visitor
{
public:
void visitorElementA(concreteElementA* pE)
{
cout << "visitor A visit name" << pE->getName().c_str()<< endl;
}
void visitorElementB(concreteElementB* pE)
{
cout << "visitor A visit num " << pE->getNumber()<< endl;
}
};

class vistorB : public visitor
{
public:
void visitorElementA(concreteElementA* pE)
{
cout << "visitor B visit name" << pE->getName().c_str() << endl;
}
void visitorElementB(concreteElementB* pE)
{
cout << "visitor B visit num " << pE->getNumber()<< endl;
}
};

 

void concreteElementA::accept(visitor * pVist)
{
pVist->visitorElementA(this);
}

void concreteElementB::accept(visitor* pVist)
{
pVist->visitorElementB(this);
}

class objectStruct
{
private:
list<Element* > mlist;
public:
objectStruct() {}
~objectStruct()
{
for (auto it = mlist.begin(); it != mlist.end(); ++it)
{
delete *it;
}
mlist.clear();
}
void add(Element* pE)
{
mlist.push_back(pE);
}
void accept(visitor* pVist)
{
for (auto it = mlist.begin(); it != mlist.end(); ++it)
{
(*it)->accept(pVist);
}
}
};


int main()
{
objectStruct mObject;
visitor* pA = new vistorA();
visitor* pB = new vistorB();
mObject.add(new concreteElementA(string("EA")));
mObject.add(new concreteElementB(string("EB"),1001));
mObject.accept(pA);
mObject.accept(pB);
delete pA;
delete pB;
cin.get();
}

标签:visitor,void,pE,模式,accept,pVist,public,访问者
来源: https://www.cnblogs.com/doulcl/p/15297372.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有