C++访问者模式-创新互联
Visitor.h文件内容如下:
目前成都创新互联已为1000多家的企业提供了网站建设、域名、网站空间、网站改版维护、企业网站设计、彭山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。访问者和元素之间互以对方为参数
#ifndef __VISITOR__ #define __VISITOR__ #include#include #include using namespace std; class Element; ///访问者接口类 class Visitor { public: virtual void Visit(Element *e) = 0; }; //具体访问者A class VisitorOne : public Visitor { public: //实现访问接口,参数为元素,在类外面实现函数体 virtual void Visit(Element *e); }; //具体访问者B class VisitorTwo : public Visitor { public: //实现访问接口,参数为元素,在类外面实现函数体 virtual void Visit(Element *e); }; //========================================================= //Element类 class Element { public: virtual void Accept(Visitor *v) { v->Visit(this);//调用访问者接口 } char* GetName() { return (char*)m_name.c_str(); } public: //类中待访问的元素 string m_name; }; //具有个性数据的元素 class ElementA: public Element { public: ElementA(string s) { m_name = s;//传入父类成员m_name中 } }; class ElementB : public Element { public: ElementB(string s) { m_name = s; } }; //========================================================= //访问者类one对元素处理方法(须声明到Element类的后面否则编译不能通过) void VisitorOne::Visit(Element *e) { //获取元素中的数据 char * data = e->GetName(); char szTemp[] = "正在处理数据:"; strcat(szTemp,data); char szTip[] = "第一个访问者"; MessageBox(0,+szTemp,szTip,0); } //访问者类two对元素的处理方法 void VisitorTwo::Visit(Element *e) { //获取元素中的数据 char * data = e->GetName(); char szTemp[] = "正在处理数据:"; strcat(szTemp,data); char szTip[] = "第二个访问者"; MessageBox(0,+szTemp,szTip,0); } #endif
调用方法如下:
ElementA ea("元素A"); ElementB eb("元素B"); VisitorOne va; VisitorTwo vb; // 双分派,“接受者”和“访问者”决定了一个操作 ea.Accept(&va); ea.Accept(&vb); eb.Accept(&va); eb.Accept(&vb);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章名称:C++访问者模式-创新互联
本文来源:http://azwzsj.com/article/csdddh.html