Proxy 模式

在以下集中情况下可以用 Proxy模式解决问题:
1)创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给代理去完成,GoF 称之为虚代理(Virtual Proxy);

2)为网络上的对象创建一个局部的本地代理,比如要操作一个网络上的一个对象(网络性能不好的时候,问题尤其突出) ,我们将这个操纵的过程交给一个代理去完成,GoF 称

之为远程代理(Remote Proxy);

3)对对象进行控制访问的时候,比如在 Jive 论坛中不同权限的用户(如管理员、普通用户等)将获得不同层次的操作权限,我们将这个工作交给一个代理去完成,GoF 称之为保

护代理(Protection Proxy)。

4)智能指针(Smart Pointer)。

 1 ////////////////////Proxy.h//////////////////////////////////////////////////////
 2 #pragma once
 3 class Subject
 4 {
 5 public:
 6     virtual ~Subject() ;
 7     virtual void Request() = 0 ;
 8 protected:
 9     Subject();
10 private:
11 };
12 
13 class ConcreteSubject : public Subject
14 {
15 public:
16     ~ConcreteSubject();
17     ConcreteSubject();
18     void Request();
19 protected:
20 private:
21 };
22 class Proxy 
23 {
24 public:
25     Proxy();
26     Proxy(Subject* sub);
27     ~Proxy();
28     void Request();
29 protected:
30 private:
31     Subject* _sub ;
32 };
 1 ///////////////Proxy.cpp///////////////////////////////////////////////////////////
 2 #include "Proxy.h"
 3 #include <iostream>
 4 using namespace std;
 5 Subject::~Subject()
 6 {
 7 
 8 }
 9 Subject::Subject()
10 {
11 
12 }
13 ConcreteSubject::ConcreteSubject()
14 {
15 
16 }
17 ConcreteSubject::~ConcreteSubject()
18 {
19 
20 }
21 void ConcreteSubject::Request()
22 {
23     cout<<"ConcreteSubject......request...."<<endl; 
24 }
25 
26 Proxy::Proxy()
27 {
28 
29 }
30 Proxy::Proxy(Subject* sub)
31 {
32     this->_sub = sub ;
33 }
34 
35 Proxy::~Proxy()
36 {
37     delete _sub ;
38 }
39 
40 void Proxy::Request()
41 {
42     cout<<"Proxy request...."<<endl;
43     _sub->Request();
44 }
 1 /////////////main.cpp/////////////////////////////////////////////////////////////
 2 #include "Proxy.h"
 3 #include <iostream>
 4 int main()
 5 {
 6     Subject* sub = new ConcreteSubject();
 7     Proxy* p = new Proxy(sub);
 8     p->Request();
 9     getchar();
10     return 0;
11 
12 }
原文地址:https://www.cnblogs.com/csxcode/p/3727463.html