1.概述
为其他对象提供一种代理以控制对这个对象的访问。
2.优缺点
优点
1)职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
2)代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
3)高扩展性
缺点
1)由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
2)实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
3.特点
1)“增加一层间接层”是软件系统中对许多负责问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段。
2)具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象作细粒度的控制,有些可能对组件模块提供抽象代理层,在架构层次对对象作proxy。
3)proxy并不一定要求保持接口的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。代理类型从某种角度上讲也可以起到控制被代理类型的访问的作用。
4.使用场景
代理模式在很多情况下都非常有用,大到一个系统框架、企业平台,小到代码片段、事务处理等。特别是你想强行控制一个对象的时候,比如:延迟加载,监视状态变更的方法等等。
5.代码
《大话设计模式C++版》
1 #include "stdafx.h" 2 #include <string> 3 #include <iostream> 4 using namespace std; 5 6 //抽象角色:通过接口或抽象类声明真实角色实现的业务方法。 7 class Interface 8 { 9 public: 10 virtual void Request()=0; 11 }; 12 13 //真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。 14 class RealClass : public Interface 15 { 16 public: 17 virtual void Request() 18 { 19 cout<<"真实的请求"<<endl; 20 } 21 }; 22 23 //代理角色:实现抽象角色,是真实角色的代理。 24 //通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 25 class ProxyClass : public Interface 26 { 27 private: 28 RealClass* m_realClass; 29 public: 30 virtual void Request() 31 { 32 m_realClass= new RealClass(); 33 m_realClass->Request(); 34 delete m_realClass; 35 } 36 }; 37 38 int _tmain(int argc, _TCHAR* argv[]) 39 { 40 ProxyClass* test=new ProxyClass(); 41 test->Request(); 42 43 system("Pause"); 44 return 0; 45 }
6.推荐网址
http://blog.csdn.net/hguisu/article/details/7542143
http://www.cnblogs.com/cbf4life/archive/2010/01/27/1657438.html
原文:http://www.cnblogs.com/SnailProgramer/p/4274214.html