代理模式
前序
卓賈易同學為了追求嬌嬌同學,于是要戴勵同學幫他送洋娃娃,花和巧克力給嬌嬌同學.請你用代理模式來設計這些送東西的過程.
代理模式
代理模式給某一個對象提供一個代理對象,并由代理對象控制對源對象的引用。代理就是一個人或一個機構代表另一個人或者一個機構采取行動。某些情況下,客戶不想或者不能夠直接引用一個對象,代理對象可以在客戶和目標對象直接起到中介的作用。客戶端分辨不出代理主題對象與真實主題對象。代理模式可以并不知道真正的被代理對象,而僅僅持有一個被代理對象的接口,這時候代理對象不能夠創建被代理對象,被代理對象必須有系統的其他角色代為創建并傳入。
實現方式(UML類圖)
實現代碼
#include <stdio.h>
class IGiveGift
{
public:
virtual void GiveDolls()=0;
virtual void GiveFlowers()=0;
virtual void GiveChocolate()=0;
};
class SchoolGirl
{
public:
char*& Name()
{
return name;
}
protected:
char* name;
};
class Pursuit : public IGiveGift
{
public:
Pursuit(SchoolGirl* _mm) : mm(_mm){}
virtual void GiveDolls()
{
printf("%s 送你洋娃娃\n",mm->Name());
}
virtual void GiveFlowers()
{
printf("%s 送你鮮花\n",mm->Name());
}
virtual void GiveChocolate()
{
printf("%s 送你巧克力\n",mm->Name());
}
protected:
SchoolGirl* mm;
};
class Proxy : public IGiveGift
{
public:
Proxy(SchoolGirl* mm)
{
gg = new Pursuit(mm);
}
~Proxy()
{
delete gg;
}
virtual void GiveDolls()
{
gg->GiveDolls();
}
virtual void GiveFlowers()
{
gg->GiveFlowers();
}
virtual void GiveChocolate()
{
gg->GiveChocolate();
}
protected:
Pursuit* gg;
};
int main()
{
SchoolGirl* jiaojiao = new SchoolGirl();
jiaojiao->Name() = "李嬌嬌";
Proxy* daili = new Proxy(jiaojiao);
daili->GiveDolls();
daili->GiveFlowers();
daili->GiveChocolate();
delete jiaojiao;
delete daili;
return 0;
}
運行結果
所有文件打包下載