访问器模式:
由于需求改变,类层次结构常需要增加新的行为,直接修改基类会增加子类负担。 在 不改变类层次结构 的前提下,运行时为各个类动态添加新的操作。 子类是需要先预知的。 能够修改的操作是有限的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 class Visitor ;class Abstract {public : virtual void AcceptVisitor (Visitor* visitor) = 0 ; virtual ~Visitor (); }; class AbstractA : public Abstract {public : virtual void AcceptVisitor (Visitor* visitor) override { visitor.ModifyAbstractA (*this ); } }; class AbstractB : public Abstract {public : virtual void AcceptVisitor (Visitor* visitor) override { visitor.ModifyAbstractB (*this ); } }; class Visitor {public : virtual void ModifyAbstractA (AbstractA& a) = 0 ; virtual void ModifyAbstractB (AbstractB& b) = 0 ; }; class VisitorA {public : virtual void ModifyAbstractA (AbstractA& a) override { } virtual void ModifyAbstractB (AbstractB& b) override { } };