6.代理模式
1代理模式的核心內容是:
A:最終追求的對象:SchoolGirl
B:實際送禮物的類:Pursuit
C:代理中含有一個Pursuit對象,實際通過調用它來送禮物。
2代理模式的作用:通過代理實現(xiàn)本應該自己做的事兒。
3代理模式具體描述
代理模式:代理模式給某一個對象提供一個代理對象,
并由代理對象控制對源對象的引用。
代理就是一個人或一個機構代表另一個人或者一個機構采取行動。
某些情況下,客戶不想或者不能夠直接引用一個對象,
代理對象可以在客戶和目標對象直接起到中介的作用。
客戶端分辨不出代理主題對象與真實主題對象。
代理模式可以并不知道真正的被代理對象,
而僅僅持有一個被代理對象的接口,這時候代理對象不能夠創(chuàng)建被代理對象,
被代理對象必須有系統(tǒng)的其他角色代為創(chuàng)建并傳入。
?
跟MM在網(wǎng)上聊天,一開頭總是“hi, 你好”,
“你從哪兒來呀?”“你多大了?”“身高多少呀?”
這些話,真煩人,寫個程序做為我的Proxy吧,
凡是接收到這些話都設置好了自己的回答,
接收到其他的話時再通知我回答,怎么樣,酷吧。
4.代理模式類圖
5.代碼:
#include <iostream>
#include <string>
using namespace std;
//代理模式:代理模式給某一個對象提供一個代理對象,
//并由代理對象控制對源對象的引用。
//代理就是一個人或一個機構代表另一個人或者一個機構采取行動。
//某些情況下,客戶不想或者不能夠直接引用一個對象,
//代理對象可以在客戶和目標對象直接起到中介的作用。
//客戶端分辨不出代理主題對象與真實主題對象。
//代理模式可以并不知道真正的被代理對象,
//而僅僅持有一個被代理對象的接口,這時候代理對象不能夠創(chuàng)建被代理對象,
//被代理對象必須有系統(tǒng)的其他角色代為創(chuàng)建并傳入。
//
//跟MM在網(wǎng)上聊天,一開頭總是“hi, 你好”,
//“你從哪兒來呀?”“你多大了?”“身高多少呀?”
//這些話,真煩人,寫個程序做為我的Proxy吧,
//凡是接收到這些話都設置好了自己的回答,
//接收到其他的話時再通知我回答,怎么樣,酷吧。
?
class SchoolGirl
{
public:
??? string name;
};
?
class IGiveGift
{
public:
??? virtual void giveDolls() = 0;
??? virtual void giveFlowers() = 0;
};
?
//追求妹子的類
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:
??? //隱藏了追求著,目標是代表追求著追妹子
??? 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;
}
運行結果如下:
李嬌嬌送你娃娃
總結
- 上一篇: 5.简单工厂模式
- 下一篇: 最原初意义的宪法被称为国家组织法表明国家