设计模式之代理模式
发布日期:2021-05-07 15:14:40 浏览次数:30 分类:原创文章

本文共 1457 字,大约阅读时间需要 4 分钟。

目录


代理模式

概念

  • Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。    
  • 所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。

类图角色和职责

  • subject(抽象主题角色):
    • 真实主题与代理主题的共同接口。
  • RealSubject(真实主题角色):
    • 定义了代理角色所代表的真实对象。 
  • Proxy(代理主题角色):
    • 含有对真实主题角色的引用,代理角色通常在将客户端调用传递给真实主题对象之前或者之后执行某些操作,而不是单纯返回真实的对象。
  • 适合于:
    • 为其他对象提供一种代理以控制对这个对象的访问。

案例1

  • 理论模型
  • 提示:a中包含b类;a、b类实现协议类protocol
#include <string>#include <iostream>using namespace std;//定义接口class Interface{public:	virtual void Request()=0;};//真实类class RealClass : public Interface{public:	virtual void Request()	{		cout<<"真实的请求"<<endl;	}};//代理类class ProxyClass : public Interface{private:	RealClass* m_realClass;public:    void SetRealSubject(RealSubject *rs)	{		m_realClass = rs;	}	virtual void Request()	{	    m_realClass= new RealClass();		m_realClass->Request();		delete m_realClass;	}};//客户端:int main(){	ProxyClass* test=new ProxyClass();	test->Request();	return 0;}

案例2

  • 出版社被代理对象,要卖书
  • 淘宝(网上书店),代理对象
  • 客户端通过淘宝进行买书。
class  Subject{public:	virtual void SaleBook() = 0;};class  RealSubject : public Subject{public:	virtual void SaleBook()	{		cout << "实体店买书....\n";	}};class  ProxyTaoBao : public Subject{public:	void SetRealSubject(RealSubject *rs)	{		m_s = rs;	}	virtual void SaleBook()	{		Double11();		m_s->SaleBook();	}	void Double11()	{		cout << "Double11 打折 半价" << endl;	}private:	RealSubject *m_s;};void main61(){	ProxyTaoBao *ptb = new ProxyTaoBao;	ptb->SaleBook();	delete ptb;	return ;}

【注】参考传智扫地僧C++设计模式

上一篇:设计模式之装饰模式
下一篇:设计模式之原型模式

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年03月30日 09时25分27秒