大话设计模式解读08-外观模式
上篇文章,介绍了《大话设计模式》的第10章——模板方法。
本篇,来介绍《大话设计模式》的第12章——外观模式。并通过C++代码实现实例代码的功能。
注:第11章介绍的是迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用
1 外观模式
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式的类图如下:
- Facade:外观类,对子系统进行管理,对接客户端。
- SubSystem:子系统类,实现子系统的功能,处理外观类指派的任务。
2 实例
背景:书中小故事,股市行情很火,小菜的一些同事在炒股票,但大多是刚入市的,什么都不懂,其中一个叫顾韵梅的同事,在大大好的牛市行情里,却连连亏损。哈,典型的新股民特征。还是要找懂行的人,基金经理。
题目:用代码的形式来实现自己操作股票以及基金经理操作股票。
2.1 版本一:自己操作股票
版本一的实现就是定义一些股票类,提供买入和卖出的接口,然后客户自己操作买入和卖出。
2.1.1 股票类
股票类的实现如下,这里以股票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 主函数
首先,实例化对应的股票,
然后,就可以调用对应的买入和卖出的接口了。
int main()
{Stock1 stock1;Stock2 stock2;NationDebt1 nationDebt1;stock1.Buy();stock2.Buy();nationDebt1.Buy();stock1.Sell();stock2.Sell();nationDebt1.Sell();return 0;
}
代码运行效果如下:
2.2 版本二:基金经理操作股票
版本一的实现比较简单,是客户自己操作股票,对于新手股民,可能一顿操作猛如虎,一看收益二百五。如果通过购买基金,由基金经理来操作股票,收益结果可能不同。
修改后的代码如下:
// 基金
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++编程,来演示外观模式的使用。