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