#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
class SchoolGirl
{
public:
SchoolGirl(string name){m_name = name;}
string m_name;
};
//interface
class Givegift
{
virtual void GiveDolls() = 0;
virtual void GiveFlowers() = 0;
virtual void GiveChocolate() = 0;
};
class Persuit : public Givegift
{
public:
Persuit(SchoolGirl* girl){m_girl = girl;}
virtual void GiveDolls()
{
cout<<"送洋娃娃給"<<m_girl->m_name<<endl;
}
virtual void GiveFlowers()
{
cout<<"送鮮花給"<<m_girl->m_name<<endl;
}
virtual void GiveChocolate()
{
cout<<"送巧克力給"<<m_girl->m_name<<endl;
}
private:
SchoolGirl *m_girl;
};
class Proxy : public Givegift
{
public:
Proxy(SchoolGirl *mm){gg = new Persuit(mm);}
virtual void GiveDolls(){gg->GiveDolls();}
virtual void GiveFlowers(){gg->GiveFlowers();}
virtual void GiveChocolate(){gg->GiveChocolate();}
private:
Persuit *gg;
};
int _tmain(int argc, _TCHAR* argv[])
{
SchoolGirl *jiaojiao = new SchoolGirl("李嬌嬌");
Proxy *daili = new Proxy(jiaojiao);
daili->GiveDolls();
daili->GiveFlowers();
daili->GiveChocolate();
return 0;
}
適用場合:
1.遠程代理,也就是爲一個對象在不同地址空間提供局部代表,這樣可以隱藏一個對象存在於不同地址空間的事實(WebService)
2.虛擬代理,是根據需要創建開銷很大的對象,通過他來存放實例化需要很長時間的真實對象,以達到性能最優化(瀏覽器優化下載)。
3.安全代理,用來控制真實對象訪問時的權限;
4.智能指引,指當調用真實對象時代理處理另外一些事(引用計數器)。