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