1. 访问者模式
将人分为男人和女人两种;将人的状态分为成功、失败、高兴等多种状态;
代码如下:
class Person {
public:
virtual void show(const Visitor& visitor)const {}
};
class Man :public Person {
public:
virtual void show(const Visitor& visitor) const {
cout << "This is man" << endl;
visitor.manConclusion(*this);
}
};
class Woman :public Person {
public:
virtual void show(const Visitor& visitor) const {
cout << "This is woman" << endl;
visitor.womanConclusioin(*this);
}
};
class Visitor {
public:
virtual void manConclusion(const Person& person)const {}
virtual void womanConclusioin(const Person& person) const {}
};
class Success:public Visitor {
public:
virtual void manConclusion(const Person& person) const {
cout << "man success" << endl;
}
virtual void womanConclusion(const Person& person)const {
cout << "woman success" << endl;
}
};
class Fail :public Visitor {
public:
virtual void manConclusion(const Person& person) const {
cout << "man fail" << endl;
}
virtual void womanConclusion(const Person& person) const {
cout << "woman fail" << endl;
}
};
2. 分析访问者模式
人的种类只有两种,二人的状态却又多种多样;
访问者模式保证在Person继承体系稳定不变的前提下,可以任意增加状态的继承体系;如增加婚姻状态,只需要增加婚姻子类就可以了;
Person是被访问者, Visitor是访问者;
访问者与被访问者之间仅仅只是依赖关系: 或是Person中的show()函数以Visitor问函数形参; 或是Visitor中的manConclusion和womanConclusion函数以Person为函数形参;