设计模式笔记-Proxy模式

原创 2016年05月30日 15:03:24

代理模式,顾名思义,代替某个东西去完成某事!GOF书上分为四类:

  • 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。比如:你可以将一个在世界某个角落一台机器通过代理假象成你局域网中的一部分。
  • 虚拟(Virtual)代理:根据需要将一个资源消耗很大或者比较复杂的对象延迟的真正需要时才创建。比如:如果一个很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,这个大图片可能就影响了文档的阅读,这时需要做个图片Proxy来代替真正的图片。
  • 保护(Protect or Access)代理:控制对一个对象的访问权限。比如:在论坛中,不同的身份登陆,拥有的权限是不同的,使用代理模式可以控制权限(当然,使用别的方式也可以实现)。
  • 智能引用(Smart Reference)代理:提供比对目标对象额外的服务。比如:纪录访问的流量(这是个再简单不过的例子),提供一些友情提示等等。

1. 既然是代理,操作接口要和原来对象一致!
2. 代理中要组合被代理的类对象指针!
3. 如本例中,既然是需要时才打开图片,那Proxy类中的Show()方法中就要处理这个逻辑,当为NULL时在其中new一个BigImage类,再调用BigImage类的Show()方法!
实现代码很简单,将别人的实现弄过来:
class Image
{
public:
	Image(string name): m_imageName(name) {}
	virtual ~Image() {}
	virtual void Show() {}
protected:
	string m_imageName;
};
class BigImage: public Image
{
public:
	BigImage(string name):Image(name) {}
	~BigImage() {}
	void Show() { cout<<"Show big image : "<<m_imageName<<endl; }
};
class BigImageProxy: public Image
{
private:
	BigImage *m_bigImage;
public:
	BigImageProxy(string name):Image(name),m_bigImage(0) {}
	~BigImageProxy() { delete m_bigImage; }
	void Show() 
	{
		if(m_bigImage == NULL)
			m_bigImage = new BigImage(m_imageName);
		m_bigImage->Show();
	}
};
客户端:
int main()
{
	Image *image = new BigImageProxy("proxy.jpg"); //代理
	image->Show(); //需要时由代理负责打开
	delete image;
	return 0;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

设计模式笔记(7 FLYWEIGHT & PROXY)

设计模式笔记(7 FLYWEIGHT & PROXY) FLYWEIGHT(享元) 意图: 运用共享技术有效地支持大量细粒度的对象。 适用性: 1.一个程序应用了大量的对象,...
  • ilvu999
  • ilvu999
  • 2012年10月18日 09:57
  • 246

笔记:Gof设计模式--Proxy

1、意图   Provide a surrogate or placeholder for another object to control access to it. 2、适应性   P...

设计模式学习笔记--代理(Proxy)模式

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。关于代理模式,日常开发过程中的使用场景还是很多的。比如调用Web Service,我们总会自动或手动生成客户端的代理类,这是远程代...

设计模式(c++)笔记之十二(Proxy模式)

一、描述       代理模式: 为其他对象提供一种代理,并以控制对这个对象的访问。       例子1:经典例子就是网络代理,你想访问facebook或者twitter ,如何绕过GFW,找个代...

读书笔记_java设计模式深入研究 第七章 代理模式 Proxy

1,代理模式:一个类可以用作其他东西的接口,其他类可以通过此类去访问被代理者。 2,UML图如下: 3,角色:     ISubject:抽象主题接口,该接口...

设计模式--学习笔记--代理模式Proxy--基础篇

“代理”这个词大家都灰常熟悉,日常生活中,上网翻墙使用代理、游戏代练是一种代理、代办业务也是一种代理等等。那么如上述所说的几个例子,动作的受益者或者使用者是“我”,而操作的方式,都是间接的,通过他人或...

设计模式之Proxy模式(学习笔记)

静态代理 问题引入 我们现在有一个Car类,Car类里面有个move方法. 现在我们想每次当这个Car move的时候都记录这个Car move了多久 (在不修改Car的源码的前提下). ...

设计模式之Proxy模式(笔记)

代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式适用场合:第一,远程代理,也就是为一个对象在不同的地址空间提供局部代理,例如webservice应用;第二、虚拟代理,根据需要创建开...

设计模式学习笔记(十三)——Proxy代理模式

Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要...

设计模式 笔记 代理模式 Proxy

//---------------------------15/04/21---------------------------- //Proxy 代理模式-----对象...
  • boydfd
  • boydfd
  • 2015年04月21日 19:15
  • 651
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式笔记-Proxy模式
举报原因:
原因补充:

(最多只允许输入30个字)