C++代理模式实现

在学习智能指针的时候,老师曾经说过,智能指针shared_ptr内部的实现原理就是代理模式,代理了普通指针本来的工作,重载了->和*操作符。
代理模式的其中一种运用就是,智能指引,当调用其真实的对象时,代理处理另外一批事。
真实的计算对象的引用次数,也就是指针的强引用和弱引用,当该对象没有引用次数的时候,可以自动释放它。

智能指针的引用计数
现在要追求一个女孩子,可是我不敢去直接送她礼物,这时,我需要找一个僚机,帮我撩妹。首先要生成一个被追求女孩子的类。

class SchoolGirl//被追求的女孩子
{
public:
	SchoolGirl(string name)
	{
		m_name = name;//女孩子的名字
	}

private:
	string m_name;
};

其次,兄弟我要告诉用什么方法去追僚机,送点花花草草还行,送个跑车钻戒岂不是亏大了。所以我封装了追求女孩子的各种方法,无法实例化,代理人只能继承我的追求方法来随机行事。

class IGiveGift//封装了具体的追求方法
{

	virtual void GiveDolls() = 0;
	virtual void GiveFlowers() = 0;
	virtual void GiveChocolate() = 0;
};

我追求者从网上找了不少撩妹的技能点,从中抽取了一部分来当作泡妞秘籍!

class Pursuit : public IGiveGift
{
public:
	Pursuit() {}
	SchoolGirl* mm = NULL;//初始化要追的女孩子对象
	Pursuit(SchoolGirl* mm)//构造函数里面需要知道追的女孩
	{
		this->mm = mm;
	}
	virtual void GiveDolls()
	{
		cout << "送你洋娃娃" << endl;
	}
	virtual void GiveFlowers()
	{
		cout << "送你鲜花" << endl;
	}
	virtual void GiveChocolate()
	{
		cout << "送你巧克力" << endl;
	}
};

僚机快跟上,就是那个妹子,帮我要到联系方式今晚请你吃饭。

class Proxy : public IGiveGift
{
public:
	Pursuit gg;//需要知道是哪个兄弟要撩妹
	Proxy(SchoolGirl mm)//需要知道要撩哪个妹子
	{
		gg = new SchoolGirl(mm);//兄弟,我来帮你撩妹
	}
	void GiveDolls()
	{
		gg.GiveDolls();//在代理人的方法中选一个来用
	}
	void GiveFlowers()
	{
		gg.GiveFlowers();
	}
	void GiveChocolate()
	{
		gg.GiveChocolate();
	}
};

下面就是客户端代码了。

int main()
{
	SchoolGirl jiaojiao("娇娇");//要追的女孩的名字
	Proxy* daili = new Proxy(jiaojiao);//兄弟,我要知道妹子的名字
	daili->GiveChocolate();//这里调用泡妞秘籍其中的一招

	getchar();
}

最后实现送你巧克力的功能。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值