6.代理模式
1代理模式的核心內(nèi)容是:
A:最終追求的對(duì)象:SchoolGirl
B:實(shí)際送禮物的類(lèi):Pursuit
C:代理中含有一個(gè)Pursuit對(duì)象,實(shí)際通過(guò)調(diào)用它來(lái)送禮物。
2代理模式的作用:通過(guò)代理實(shí)現(xiàn)本應(yīng)該自己做的事兒。
3代理模式具體描述
代理模式:代理模式給某一個(gè)對(duì)象提供一個(gè)代理對(duì)象,
并由代理對(duì)象控制對(duì)源對(duì)象的引用。
代理就是一個(gè)人或一個(gè)機(jī)構(gòu)代表另一個(gè)人或者一個(gè)機(jī)構(gòu)采取行動(dòng)。
某些情況下,客戶不想或者不能夠直接引用一個(gè)對(duì)象,
代理對(duì)象可以在客戶和目標(biāo)對(duì)象直接起到中介的作用。
客戶端分辨不出代理主題對(duì)象與真實(shí)主題對(duì)象。
代理模式可以并不知道真正的被代理對(duì)象,
而僅僅持有一個(gè)被代理對(duì)象的接口,這時(shí)候代理對(duì)象不能夠創(chuàng)建被代理對(duì)象,
被代理對(duì)象必須有系統(tǒng)的其他角色代為創(chuàng)建并傳入。
?
跟MM在網(wǎng)上聊天,一開(kāi)頭總是“hi, 你好”,
“你從哪兒來(lái)呀?”“你多大了?”“身高多少呀?”
這些話,真煩人,寫(xiě)個(gè)程序做為我的Proxy吧,
凡是接收到這些話都設(shè)置好了自己的回答,
接收到其他的話時(shí)再通知我回答,怎么樣,酷吧。
4.代理模式類(lèi)圖
5.代碼:
#include <iostream>
#include <string>
using namespace std;
//代理模式:代理模式給某一個(gè)對(duì)象提供一個(gè)代理對(duì)象,
//并由代理對(duì)象控制對(duì)源對(duì)象的引用。
//代理就是一個(gè)人或一個(gè)機(jī)構(gòu)代表另一個(gè)人或者一個(gè)機(jī)構(gòu)采取行動(dòng)。
//某些情況下,客戶不想或者不能夠直接引用一個(gè)對(duì)象,
//代理對(duì)象可以在客戶和目標(biāo)對(duì)象直接起到中介的作用。
//客戶端分辨不出代理主題對(duì)象與真實(shí)主題對(duì)象。
//代理模式可以并不知道真正的被代理對(duì)象,
//而僅僅持有一個(gè)被代理對(duì)象的接口,這時(shí)候代理對(duì)象不能夠創(chuàng)建被代理對(duì)象,
//被代理對(duì)象必須有系統(tǒng)的其他角色代為創(chuàng)建并傳入。
//
//跟MM在網(wǎng)上聊天,一開(kāi)頭總是“hi, 你好”,
//“你從哪兒來(lái)呀?”“你多大了?”“身高多少呀?”
//這些話,真煩人,寫(xiě)個(gè)程序做為我的Proxy吧,
//凡是接收到這些話都設(shè)置好了自己的回答,
//接收到其他的話時(shí)再通知我回答,怎么樣,酷吧。
?
class SchoolGirl
{
public:
??? string name;
};
?
class IGiveGift
{
public:
??? virtual void giveDolls() = 0;
??? virtual void giveFlowers() = 0;
};
?
//追求妹子的類(lèi)
class Pursuit :public IGiveGift
{
private:
??? SchoolGirl mm;
public:
??? Pursuit(SchoolGirl m)
??? {
??????? mm = m;
??? }
??? void giveDolls()
??? {
??????? cout << mm.name << " 送你娃娃" << endl;
??? }
??? void giveFlowers()
??? {
??????? cout << mm.name << " 送你鮮花" << endl;
??? }
};
?
class Proxy :public IGiveGift
{
private:
??? //隱藏了追求著,目標(biāo)是代表追求著追妹子
??? Pursuit gg;
public:
??? Proxy(SchoolGirl mm) :gg(mm)
??? {
??????? //gg=g;
??? }
??? void giveDolls()
??? {
??????? gg.giveDolls();
??? }
??? void giveFlowers()
??? {
??????? gg.giveFlowers();
??? }
};
?
int main()
{
??? SchoolGirl lijiaojiao;
??? lijiaojiao.name = "李嬌嬌";
??? //Pursuit zhuojiayi(lijiaojiao);
??? Proxy daili(lijiaojiao);
?
??? daili.giveDolls();
??? cin.get();
??? return 0;
}
運(yùn)行結(jié)果如下:
李嬌嬌送你娃娃
總結(jié)