作用:

为其他对象提供一种代理以控制对这个对象的访问。 

 

 UML结构图:

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

 

抽象基类:

1)Subject:定义了Proxy和RealSubject的公有接口,这样就可以在任何需要使用到RealSubject的地方都使用Proxy。
解析:
Proxy其实是基于这样一种时常使用到的技术-某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用Proxy作一个占位符.这个模式实现的要点就是Proxy和RealSubject都继承自Subject,这样保证了两个的接口都是一致的。

 

代码实现: 

 

 1 #ifndef PROXY_H
 2 #define PROXY_H
 3 
 4 // 定义了Proxy和RealSubject的公有接口,
 5 // 这样就可以在任何需要使用到RealSubject的地方都使用Proxy.
 6 class Subject
 7 {
 8 public:
 9     Subject(){}
10     virtual ~Subject(){}
11 
12     virtual void Request() = 0;
13 };
14 
15 // 真正使用的实体
16 class RealSubject
17     : public Subject
18 {
19 public:
20     RealSubject();
21     virtual ~RealSubject(){}
22 
23     virtual void Request();
24 };
25 
26 // 代理类,含有一个指向RealSubject对象的指针
27 class Proxy
28     : public Subject
29 {
30 public:
31     Proxy();
32     virtual ~Proxy();
33 
34     virtual void Request();
35 
36 private:
37     RealSubject* m_pRealSubject;
38 };
39 #endif
40 

 


 1 #include "Proxy.h"
 2 #include <iostream>
 3 
 4 RealSubject::RealSubject()
 5 {
 6     std::cout << "Constructing a RealSubject\n";
 7 }
 8 
 9 void RealSubject::Request()
10 {
11     std::cout << "Request By RealSubject\n";
12 }
13 
14 Proxy::Proxy()
15     : m_pRealSubject(NULL)
16 {
17     std::cout << "Constructing a Proxy\n";
18 }
19 
20 Proxy::~Proxy()
21 {
22     delete m_pRealSubject;
23     m_pRealSubject = NULL;
24 }
25 
26 void Proxy::Request()
27 {
28     // 需要使用RealSubject的时候才去初始化
29     if (NULL == m_pRealSubject)
30     {
31         std::cout << "Request By Proxy\n";
32         m_pRealSubject = new RealSubject();
33     }
34     m_pRealSubject->Request();
35 }
36 

相关文章:

  • 2022-01-18
  • 2022-12-23
  • 2022-12-23
  • 2021-08-21
  • 2021-05-25
  • 2021-06-17
  • 2022-01-07
  • 2021-09-18
猜你喜欢
  • 2021-08-23
  • 2021-11-22
  • 2021-07-11
  • 2022-02-17
  • 2021-11-14
相关资源
相似解决方案