访问者模式
来源:互联网 发布:淘宝商城积分兑换 编辑:程序博客网 时间:2024/06/10 08:10
#include <iostream>#include <vector>#include <string>using namespace std;class Element;class Visitor{public:virtual void visitElementOne(Element* pobjElement) = 0;virtual void visitElementTwo(Element* pobjElement) = 0;};class Element{public:Element(const string& strName) : m_strName(strName) {}virtual void accept(Visitor* pobjVisitor) = 0;void setName(const string& strName) { m_strName = strName; }const string& getName() { return m_strName; }protected:string m_strName = "";};class VisitorOne : public Visitor{public:virtual void visitElementOne(Element* pobjElement) override{cout << pobjElement->getName() << " visitor one visits one" << endl;}virtual void visitElementTwo(Element* pobjElement) override{cout << pobjElement->getName() << " visitor one visits two" << endl;}};class VisitorTwo : public Visitor{public:virtual void visitElementOne(Element* pobjElement) override{cout << pobjElement->getName() << " visitor two visits one" << endl;}virtual void visitElementTwo(Element* pobjElement) override{cout << pobjElement->getName() << " visitor two visits two" << endl;}};class ElementOne : public Element{public:ElementOne(const string& strName) : Element(strName) {}virtual void accept(Visitor* pobjVisitor) override{pobjVisitor->visitElementOne(this);}};class ElementTwo : public Element{public:ElementTwo(const string& strName) : Element(strName) {}virtual void accept(Visitor* pobjVisitor) override{pobjVisitor->visitElementTwo(this);}};class ObjectStruct{public:void addElement(Element* pobjElement){m_vecElement.push_back(pobjElement);}void removeElement(Element* pobjElement){for (auto it = m_vecElement.begin(); it != m_vecElement.end(); ++it){if (*it == pobjElement){m_vecElement.erase(it);break;}}}void accept(Visitor* pobjVisitor){for (auto& it : m_vecElement){if (it){it->accept(pobjVisitor);}}}private:vector<Element*> m_vecElement;};int main(){ObjectStruct objObjectStruct;objObjectStruct.addElement(new ElementOne("彳亍"));objObjectStruct.addElement(new ElementTwo("行"));Visitor* pobjVisitorOne = new VisitorOne();Visitor* pobjVisitorTwo = new VisitorTwo();objObjectStruct.accept(pobjVisitorOne);objObjectStruct.accept(pobjVisitorTwo);return 0;}总结:把处理从数据结构中分离,需要数据结构相对稳定
0 0
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- .sh脚本语法
- 第一篇博客
- bug修复-android中的onCreate两个参数的方法是什么鬼?
- 字符串非空判断:StringUtils中 isNotEmpty 和isNotBlank的区别
- JDBC借助Spring进行增删改查的操作--大大简化了程序
- 访问者模式
- shell运算符
- Ubuntu10.04下Linux内核编译的完整步骤
- 第四天、婚礼上的谎言
- 进程通信的方式
- Android Duplicate files copied in APK
- LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- java类库中的File类使用
- JDBC数据库的API对照实例学习