代理(Proxy)模式

代理模式

为其他对象提供一种代理以控制这个对象的访问

代理的分类:

  • 虚代理(Virtual Proxy) : 创建开销大的对象时,我们将其创建过程交给代理完成。
  • 远程代理(Remote Proxy) : 在网络上的对象创建一个局部本地代理,比如要操作网络上一个对象时,通过代理去操作。
  • 保护代理(Protection Proxy) : 对对象进行访问控制时,访问权限不足的操作交给代理去操作。
  • 智能指针(Smart Pointer) : 当调用真是对象时,我们需要代理额外的处理一些事情。

Proxy模式实现了逻辑和实现的彻底解耦 – 逻辑上使用代理,真正实现在代理中被使用。

Proxy

代理与被代理者的联系是行为上的代理

举个栗子: 蓝猫想送一朵花给咖喱,引起不好意思,请菲菲代为送达。此时行为是送花,代理是菲菲,真正的实现是蓝猫。

//proxy.hpp

#include <iostream>
#ifndef _DESIGN_PATTERN_PROXY_PROXY_HPP_
#define _DESIGN_PATTERN_PROXY_PROXY_HPP_

namespace design_pattern
{
class BlueCat
{
public:
	void SendFlower()
	{
		std::cout << "BlueCat : This is give your flowers!" << std::endl;
	}
};

class FeiFei
{
	BlueCat *pbeproxy_;
public:
	FeiFei(BlueCat *ptr) : pbeproxy_(ptr) {}
	void SendFlower()
	{
		pbeproxy_->SendFlower();
	}
};

}
#endif // !_DESIGN_PATTERN_PROXY_PROXY_HPP_


//proxy_main.cpp

#include "proxy.hpp"
using namespace design_pattern;

int main()
{
	BlueCat b;
	FeiFei f(&b);

	f.SendFlower();
	return 0;
}

装饰者模式与代理模式

相似吗???

相似之处在于,当装饰者模式中Decorator内部的父类指针换成与它同层次的职责类时,两者的类图基本相同。此时,Decorator类似于Proxy,Call类似于BlueCat,Cellphone类似于Flower。

不相似!!!

功能不同,proxy将所有操作都交给内部对象BlueCat来处理。而Decorator的操作,不但承接了子类操作的覆盖,还承接了内部对象的操作。与智能指针的代理颇为相似。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值