代理模式

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

原文地址:https://www.cnblogs.com/SnailProgramer/p/4274214.html