c++ 设计模式23讲之代理模式

代理模式

定义:

给莫个对象提供抽象占位符,由代理对象控制对源对象的访问

优点:

(1)协调调用者和被调用者降低系统耦合

(2)可以在代理类增加额外的职责

(3)起到远程代理、缓存代理、虚拟代理、保护代理等功能

缺点:

(1)增加中间代理类,增加代码复杂性和系统性能消耗

(2)代理模式需新增额外工作

使用范围:

当客户端无法直接访问真实系统,或者访问需要增加其它前置方法

如:银行前置机提供口令验证等

结构:

proxy_pattern:代理类和真实系统抽象类

proxy:代理类实现与客户端交互

real_system:提供真实请求方法

 

实现:

namespace structural_pattern
{
	class proxy_pattern
	{
	public:
		virtual void request() = 0;
	};

	class real_system : public proxy_pattern
	{
	public:
		virtual void request() override
		{
			std::cout << "真实系统请求应答" << std::endl;
		}
	};
	class proxy : public  proxy_pattern
	{
	public:
		virtual void request() override
		{
            real_system real;
			do_anything();
			real.request();
		}
	private:
		void do_anything()
		{
			std::cout << "代理者前置行为" << std::endl;
		}
	};
}

测试:

基于GoogleTest 的单元测试框架;框架可参考如下网址:

https://www.cnblogs.com/jycboy/p/gtest_catalog.html

using  namespace structural_pattern;

TEST(test_proxy_pattern_request, success_proxy_request)
{
	proxy pro;
	pro.request();
}

总结

(1)代理类与具体实现类继承统一接口,定义同一方法

(2)代理类与具体类是1对1关系,如果是1对多关系代理类需要额外区别,且要保证继承实现同一个抽象方法

(3)代理类可以增加前值或者后置方法

(4)与装饰模式的区别在于装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值