设计模式笔记-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;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangjun03402/article/details/51536630

设计模式:代理模式(Proxy)

代理模式:为其他对象提供一种代理以控制对这个对象的访问。 代理模式中的角色: 抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对...
  • u013256816
  • u013256816
  • 2016-03-29 21:38:09
  • 5358

设计模式中代理(proxy)与委托(delegate)的语义区别

2014年10月17日 05:39:19      今天经浩哥与柏哥的解释,自己终于掌握了proxy与delegete语义的区别:      proxy :译为代理, 被代理方(B)与代理方(A)...
  • jince007
  • jince007
  • 2014-10-17 06:50:56
  • 2627

代理模式(Proxy Pattern)- 最易懂的设计模式解析

前言今天我来全面总结一下Android开发中最常用的设计模式 - 代理模式。 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 ...
  • carson_ho
  • carson_ho
  • 2017-02-07 15:34:30
  • 8389

Proxy-Stub模式分析

一.说明 Stub 跟 Proxy 是一对,俗称“代理-桩”,一般用在远程方法调用。 Proxy 相当于是拿在手里的遥控器,而 Stub 相当于长在电视机里的遥控接收器,它们有着一一对应的接口方法...
  • a910626
  • a910626
  • 2016-04-17 16:04:54
  • 1724

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

设计模式学习笔记——代理(Proxy)模式@(设计模式)[设计模式, 代理模式, proxy]设计模式学习笔记代理Proxy模式 基本介绍 代理案例 类图 实现代码 Printable接口 Print...
  • q547550831
  • q547550831
  • 2017-04-13 10:54:20
  • 393

从IBinder接口学习Proxy-Stub设计模式

http://www.it165.net/pro/html/201402/9027.html 前言: ----IBinder是Android框架的通用性接口,通用性接口...
  • xuxl2050
  • xuxl2050
  • 2015-06-10 23:22:58
  • 709

设计模式总结之Proxy Pattern(代理模式)

为其他对象提供一种代理以控制对这个对象的访问。
  • cooldragon
  • cooldragon
  • 2016-08-11 00:50:44
  • 1573

设计模式(结构型)之代理模式(Proxy Pattern)

代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式...
  • yanbober
  • yanbober
  • 2015-05-04 18:48:24
  • 6373

设计模式之动态代理(dynamic proxy)

1 动态代理与静态代理我们从上一篇设计模式之代理模式一文中已经知道,在代理模式中代理对象和被代理对象一般实现相同的接口,调用者与代理对象进行交互。代理的存在对于调用者来说是透明的,调用者看到的只是接口...
  • suifeng3051
  • suifeng3051
  • 2016-05-26 15:16:51
  • 2612

设计模式(一) 有关Proxy模式和Bridge模式

设计模式去年就有看过,那个时候要对付一个类似于VC的可视化开发环境 (当然远没有VC 牛逼),所以就抓了本设计模式书来看 (后来知道是所谓"4人帮"出品的那本,呵呵),当时看的不算特别明白,但是也并不...
  • kakashir
  • kakashir
  • 2009-06-19 10:00:00
  • 1145
收藏助手
不良信息举报
您举报文章:设计模式笔记-Proxy模式
举报原因:
原因补充:

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