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


作用:

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

 

 UML结构图:

 

 

抽象基类:

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

 

代码实现: 

 

Proxy.h
 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 

 


Proxy.cpp
 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 

 


 

 1 #include "Proxy.h"
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6     Subject* pProxy = new Proxy();
 7     pProxy->Request();
 8 
 9     delete pProxy;
10 
11     system("pause");
12 
13     return 0;
14 }
15 

 

 

 

 

 

posted @ 2010-12-05 14:22  忧郁的加菲猫  阅读(398)  评论(0编辑  收藏  举报