C++ 设计模式之访问者模式


设计模式之访问者模式
  访问者模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定的系统。它把数据结构和作用于结构上的操作之间耦合解脱开,使得操作几何可以相对自由地演化。访问者模式的目的使要把处理从数据结构中分离出来。很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的。

其UML图如下:

每个ConcreteVisitor都有自己的数据处理方式,但是它们处理的数据则是不变的。在ObjectStucture中有Element的列表,并提供了访问数据的接口。

示例代码如下:

1 // VisitorModel.h文件 2 #pragma once 3 #include <iostream> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 8 class Visitor; 9 // 被访问元素 10 class Element 11 19 std::string getName() 20 23 virtual void Accept(Visitor * visitor) = 0; 24 }; 25 26 class ConcreteElementA : public Element 27 30 void Accept(Visitor * visitor); 31 }; 32 33 class ConcreteElementB : public Element 34 37 void Accept(Visitor * visitor); 38 }; 39 40 // 访问者 41 class Visitor 42 ; 47 48 class ConcreteVisitorA : public Visitor 49 55 void VisitConcreteElementB(ConcreteElementB * p) 56 59 }; 60 61 class ConcreteVisitorB : public Visitor 62 68 void VisitConcreteElementB(ConcreteElementB * p) 69 72 }; 73 74 void ConcreteElementA::Accept(Visitor * visitor) 75 78 void ConcreteElementB::Accept(Visitor * visitor) 79 82 // 聚集类 83 class ObjectStructure 84 94 m_veclear(); 95 } 96 void add(Element * p) 97 100 void accept(Visitor * visitor) 101 106 } 107 };

测试代码如下:

1 #include <iostream> 2 #include "VisitorModel.h" 3 4 int main() 5

测试结果如下图:

访问者模式的优点就是增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。



上一篇:代码的坏味道 《重构改善既有代码的设计》

下一篇:C++ 设计模式之模板方法模式


C/C&#x2B;&#x2B;
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图