上篇文章,介紹了《大話(huà)設(shè)計(jì)模式》的第10章——模板方法。
本篇,來(lái)介紹《大話(huà)設(shè)計(jì)模式》的第12章——外觀(guān)模式。并通過(guò)C++代碼實(shí)現(xiàn)實(shí)例代碼的功能。
注:第11章介紹的是迪米特法則:如果兩個(gè)類(lèi)不必彼此直接通信,那么這兩個(gè)類(lèi)就不應(yīng)當(dāng)發(fā)生直接的相互作用。如果其中一個(gè)類(lèi)需要調(diào)用另一個(gè)類(lèi)的某一個(gè)方法的話(huà),可以通過(guò)第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用
1 外觀(guān)模式
外觀(guān)模式(Facade):為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,此模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。
外觀(guān)模式的類(lèi)圖如下:
- Facade:外觀(guān)類(lèi),對(duì)子系統(tǒng)進(jìn)行管理,對(duì)接客戶(hù)端。SubSystem:子系統(tǒng)類(lèi),實(shí)現(xiàn)子系統(tǒng)的功能,處理外觀(guān)類(lèi)指派的任務(wù)。
2 實(shí)例
背景:書(shū)中小故事,股市行情很火,小菜的一些同事在炒股票,但大多是剛?cè)胧械?,什么都不懂,其中一個(gè)叫顧韻梅的同事,在大大好的牛市行情里,卻連連虧損。哈,典型的新股民特征。還是要找懂行的人,基金經(jīng)理。
題目:用代碼的形式來(lái)實(shí)現(xiàn)自己操作股票以及基金經(jīng)理操作股票。
2.1 版本一:自己操作股票
版本一的實(shí)現(xiàn)就是定義一些股票類(lèi),提供買(mǎi)入和賣(mài)出的接口,然后客戶(hù)自己操作買(mǎi)入和賣(mài)出。
2.1.1 股票類(lèi)
股票類(lèi)的實(shí)現(xiàn)如下,這里以股票1、股票2和國(guó)債1進(jìn)行示例:
// 股票1
class Stock1
{
public:
void Buy()
{
printf("股票1買(mǎi)入n");
}
void Sell()
{
printf("股票1賣(mài)出n");
}
};
// 股票2
class Stock2
{
public:
void Buy()
{
printf("股票2買(mǎi)入n");
}
void Sell()
{
printf("股票2賣(mài)出n");
}
};
// 國(guó)債1
class NationDebt1
{
public:
void Buy()
{
printf("國(guó)債1買(mǎi)入n");
}
void Sell()
{
printf("國(guó)債1賣(mài)出n");
}
};
2.1.2 主函數(shù)
首先,實(shí)例化對(duì)應(yīng)的股票,
然后,就可以調(diào)用對(duì)應(yīng)的買(mǎi)入和賣(mài)出的接口了。
int main()
{
Stock1 stock1;
Stock2 stock2;
NationDebt1 nationDebt1;
stock1.Buy();
stock2.Buy();
nationDebt1.Buy();
stock1.Sell();
stock2.Sell();
nationDebt1.Sell();
return 0;
}
代碼運(yùn)行效果如下:
2.2 版本二:基金經(jīng)理操作股票
版本一的實(shí)現(xiàn)比較簡(jiǎn)單,是客戶(hù)自己操作股票,對(duì)于新手股民,可能一頓操作猛如虎,一看收益二百五。如果通過(guò)購(gòu)買(mǎi)基金,由基金經(jīng)理來(lái)操作股票,收益結(jié)果可能不同。
修改后的代碼如下:
// 基金
class Fund
{
public:
void Buy()
{
printf("基金操作買(mǎi)入:n");
m_stock1.Buy();
m_stock2.Buy();
m_nationDebt1.Buy();
}
void Sell()
{
printf("基金操作賣(mài)出:n");
m_stock1.Sell();
m_stock2.Sell();
m_nationDebt1.Sell();
}
private:
Stock1 m_stock1;
Stock2 m_stock2;
NationDebt1 m_nationDebt1;
};
int main()
{
Fund fund;
fund.Buy();
fund.Sell();
return 0;
}
運(yùn)行效果如下:
總結(jié)
本篇介紹了設(shè)計(jì)模式中的外觀(guān)模式,并通過(guò)購(gòu)買(mǎi)股票和基金的實(shí)例,使用C++編程,來(lái)演示外觀(guān)模式的使用。
文章推薦
《大話(huà)設(shè)計(jì)模式》解讀01-簡(jiǎn)單工廠(chǎng)模式
《大話(huà)設(shè)計(jì)模式》解讀02-策略模式