常見設計模式的解析和實現(C++)之十-Proxy模式
作用:
為其他對象提供一種代理以控制對這個對象的訪問。
UML結構圖:

抽象基類:
1)Subject:定義了Proxy和RealSubject的公有接口,這樣就可以在任何需要使用到RealSubject的地方都使用Proxy.
解析:
Proxy其實是基于這樣一種時常使用到的技術-某個對象直到它真正被使用到的時候才被初始化,在沒有使用到的時候就暫時用Proxy作一個占位符.這個模式實現的要點就是Proxy和RealSubject都繼承自Subject,這樣保證了兩個的接口都是一致的.
實現:
1)Proxy.h

/**//********************************************************************
????created:????2006/07/26
????filename:?????Proxy.h
????author:????????李創
????????????????http://www.shnenglu.com/converse/

????purpose:????Proxy模式的演示代碼
*********************************************************************/

#ifndef?PROXY_H
#define?PROXY_H

//?定義了Proxy和RealSubject的公有接口,
//?這樣就可以在任何需要使用到RealSubject的地方都使用Proxy.
class?Subject


{
public:

????Subject()
{}

????virtual?~Subject()
{}

????virtual?void?Request()?=?0;
};

//?真正使用的實體
class?RealSubject
????:?public?Subject


{
public:
????RealSubject();

????virtual?~RealSubject()
{}

????virtual?void?Request();
};

//?代理類,含有一個指向RealSubject對象的指針
class?Proxy
????:?public?Subject


{
public:
????Proxy();
????virtual?~Proxy();

????virtual?void?Request();

private:
????RealSubject*?m_pRealSubject;
};
#endif
2)Proxy.cpp

/**//********************************************************************
????created:????2006/07/26
????filename:?????Proxy.cpp
????author:????????李創
????????????????http://www.shnenglu.com/converse/

????purpose:????Proxy模式的演示代碼
*********************************************************************/

#include?"Proxy.h"
#include?<iostream>

RealSubject::RealSubject()


{
????std::cout?<<?"Constructing?a?RealSubject\n";
}

void?RealSubject::Request()


{
????std::cout?<<?"Request?By?RealSubject\n";
}

Proxy::Proxy()
????:?m_pRealSubject(NULL)


{
????std::cout?<<?"Constructing?a?Proxy\n";
}

Proxy::~Proxy()


{
????delete?m_pRealSubject;
????m_pRealSubject?=?NULL;
}

void?Proxy::Request()


{
????//?需要使用RealSubject的時候才去初始化
????if?(NULL?==?m_pRealSubject)

????
{
????????std::cout?<<?"Request?By?Proxy\n";
????????m_pRealSubject?=?new?RealSubject();
????}
????m_pRealSubject->Request();
}

3)Main.cpp

/**//********************************************************************
????created:????2006/07/26
????filename:?????Main.cpp
????author:????????李創
????????????????http://www.shnenglu.com/converse/

????purpose:????Proxy模式的測試代碼
*********************************************************************/

#include?"Proxy.h"
#include?<stdlib.h>

int?main()


{
????Subject*?pProxy?=?new?Proxy();
????pProxy->Request();

????delete?pProxy;

????system("pause");

????return?0;
}
為其他對象提供一種代理以控制對這個對象的訪問。
UML結構圖:
抽象基類:
1)Subject:定義了Proxy和RealSubject的公有接口,這樣就可以在任何需要使用到RealSubject的地方都使用Proxy.
解析:
Proxy其實是基于這樣一種時常使用到的技術-某個對象直到它真正被使用到的時候才被初始化,在沒有使用到的時候就暫時用Proxy作一個占位符.這個模式實現的要點就是Proxy和RealSubject都繼承自Subject,這樣保證了兩個的接口都是一致的.
實現:
1)Proxy.h





























































2)Proxy.cpp


























































3)Main.cpp



























posted on 2006-07-26 22:29 那誰 閱讀(4571) 評論(1) 編輯 收藏 引用 所屬分類: 設計模式