1.Visitor模式:将更新(变更)封装到一个类中(访问操作),并由待更改类提供一个接收接口,则可在不破坏类的前提下,为类提供增加新的新操作。
2.Visitor模式结构图
Visitor模式的关键是双分派(Double-Dispatch)的技术:Accept()操作是一个双分派的操作,具体调用哪个Accept()操作,有两个决定因素(1)Element类型(2)Visitor类型。
3.实现
1 #ifndef _VISITOR_H_ 2 #define _VISITOR_H_ 3 4 class Element; 5 6 class Visitor 7 { 8 public: 9 virtual ~Visitor(); 10 virtual void VisitConcreteElementA(Element* elm) = 0; 11 virtual void VisitConcreteElementB(Element* elm) = 0; 12 protected: 13 Visitor(); 14 private: 15 }; 16 17 class ConcreteVisitorA:public Visitor 18 { 19 public: 20 ConcreteVisitorA(); 21 virtual ~ConcreteVisitorA(); 22 virtual void VisitConcreteElementA(Element* elm); 23 virtual void VisitConcreteElementB(Element* elm); 24 protected: 25 private: 26 }; 27 28 class ConcreteVisitorB:public Visitor 29 { 30 public: 31 ConcreteVisitorB(); 32 virtual ~ConcreteVisitorB(); 33 virtual void VisitConcreteElementA(Element* elm); 34 virtual void VisitConcreteElementB(Element* elm); 35 protected: 36 private: 37 }; 38 39 #endif