设计模式学习(五) 代理模式 Proxy

1. 代理模式的定义和类图

从代理模式开始进入结构型模式的学习阶段,而结构模式的宗旨是让类与类进行组合,获取各大的结构。而代理模式属于其中最典型的一种,具体来说,代理类与被代理类都是为了实现某个对象,但是代理类可以在代理类的功能实现过程中(前后)进行一些处理工作。其具体的结构形式如其类图所示:
代理模式类图
根据代理模式的类图课件,代理类与被代理类都是为了实现同样的一个功能Request,而被代理类实现的功能为其基本实现,代理类则可以在类中调用被代理类,在其实现的前后(即过程中)进行一些额外操作。由此,当被代理类的基本功能确定后,可以通过多个代理类来实现对其基本功能的拓展。

2. 代理模式的代码实现

#include <iostream>
#include <string>
using namespace std;

class Subject
{
public:
	virtual void KillMonster() = 0;
};

class NormalPlayer : public Subject
{
public:
	void KillMonster()
	{
		cout << "NormalPlayer Kill the Monster By 10 Damage" << endl;
	}
};

class ProxyPlayer : public Subject
{
public:
	ProxyPlayer(Subject* player)
	{
		m_normalplayer = player;
	}
	void ReduceMonsterArmor()
	{
		cout << "ProxyPlayer Reduce the Monster's Armor" << endl;
	}
	void KillMonster1sec()
	{
		cout << "ProxyPlayer Kill the Monster in 1 sec" << endl;
	}
	void KillMonster()
	{
		m_normalplayer = new NormalPlayer;

		ReduceMonsterArmor();
		m_normalplayer->KillMonster();   //代理模式,即调用被代理对象实现基本功能,并在其实现前后添加多种功能
		KillMonster1sec();
	}
private:
	Subject* m_normalplayer;
};

int main()
{
	Subject* player = new NormalPlayer;
	player->KillMonster();
	Subject* proxyplayer = new ProxyPlayer(player);
	proxyplayer->KillMonster();

	delete player;
	delete proxyplayer;
}

通过实现过程可以看出,代理类即在内部调用被代理类的基本功能实现函数,然后在其实现前后,或者实现过程中对其进行修饰加工之类的操作,则变成了被代理类的自身Request函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方寸间沧海桑田

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值