设计模式--代理模式

解释说明:

main(),西门庆

IKindWomen,接口

CWangPo,代理

CPanJinLian,实际执行者之一

CJiaShi,实际执行者之二

看起来代理模式的结构和策略模式类似,都是由一个类来装载接口的一个实例,策略模式是CContext来装载,代理模式是CWangPo来装载。CContext不是从IStrategy派生,所以不需要实现IStrategy接口函数,而CWangPo是从IKindWomen派生的所以CWangPo很清楚CPanJinLian和CJiaShi的接口函数。这就是代理,代理人知道被代理人能干的事情即函数,所以代理人可以成为中介。所谓代理,真实的执行者在代理的后面。 
代理和实际执行者派生于共同的接口,代理拥有实际执行者的实例。代理的每一个函数(接口的实现函数),直接调用实际执行者的对应接口函数。 
注意:代理只是简单的装载,然后调用实际执行者的函数 
代理和实际执行者派生于共同的接口

#include <iostream>

using namespace std;

//
class IKindWomen
{
public:
	IKindWomen(){};
	virtual ~IKindWomen(){};

	virtual void MakeEyesWithMan() = 0;
	virtual void HappyWithMan() = 0;
};

//实际执行者的代理者
class WangPo :public IKindWomen
{
public:
	WangPo(IKindWomen* pKindwomen)
	{
		this->m_kindwomen = pKindwomen;
	}
	~WangPo()
	{
		delete this->m_kindwomen;
	}
	void HappyWithMan()
	{
		this->m_kindwomen->HappyWithMan();
	}
	void MakeEyesWithMan()
	{
		this->m_kindwomen->MakeEyesWithMan();
	}

private:
	IKindWomen* m_kindwomen;

};
//实际执行者Panjinlian
class PanJinLian :public IKindWomen
{
public:
	PanJinLian(){}
	~PanJinLian(){}

	void HappyWithMan()
	{
		cout << "潘金莲和那个男人做..." << endl;
	}
	void MakeEyesWithMan()
	{
		cout << "潘抛媚眼" << endl;
	}
};
//实际执行者jiashi
class JiaShi :public IKindWomen
{
public:
	JiaShi(){}
	~JiaShi(){}

	void HappyWithMan()
	{
		cout << "驾驶和那个男人做..." << endl;
	}
	void MakeEyesWithMan()
	{
		cout << "家私抛媚眼" << endl;
	}
};

class Jiashi
{

};
//测试
void doPanjinlian()
{
	WangPo* WangePo;
	WangePo = new WangPo(new PanJinLian);
	WangePo->MakeEyesWithMan();
	WangePo->HappyWithMan();
	delete WangePo;
}
void doJiashi()
{
	WangPo* pWangPo;
	pWangPo = new WangPo(new JiaShi);
	pWangPo->MakeEyesWithMan();
	pWangPo->HappyWithMan();
	delete pWangPo;
}

int main()
{
	doPanjinlian();

	doJiashi();

	return 0;
}

参考链接:https://www.cnblogs.com/wanggary/category/294620.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值