设计模式-访问者模式

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为函数形参;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值