外观模式:提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。
目地:让接口变得简单,是为了简化子系统的接口。
外观模式也十分的简单,简而言之,就是简化你的类的接口,将一系列的复杂的过程封装到内部,对外只提供最简单的接口
结构图:
应用示例:
假如你想吃一顿大餐,那么我想你要,首先去买菜,然后回到家后自己做菜,最后吃完饭以后要洗碗打扫。
这么一来你需要3个类,Shopper, Cook, Dishwasher, 分别来完成买菜,做菜,洗碗等工作,显然这非常麻烦,能不能简化这个过程?当然可以!去餐馆吃。
餐馆这时候显然就是外观模式了,他把复杂的过程封装到内部,用户不用关心细节。
实现代码:
Shopper 采购类
- class Shopper
- {
- public:
- void shopForGroceries()
- {
- cout<<"买菜"<<endl;
- }
- };
Cook 厨师类
- class Cook
- {
- public:
- void doCook()
- {
- cout<<"做饭"<<endl;
- }
- };
洗碗工类 Dishwasher
- class Dishwasher
- {
- public:
- void washDish()
- {
- cout<<"洗碗"<<endl;
- }
- };
餐馆类
- class Restaurant
- {
- public:
- Restaurant()
- {
- }
- void haveAMeal()
- {
- m_shopper.shopForGroceries();
- m_cook.doCook();
- m_washer.washDish();
- }
- private:
- Shopper m_shopper;
- Cook m_cook;
- Dishwasher m_washer;
- };
客户端:
- Restaurant rt;
- rt.haveAMeal();
总结:外观模式的主要用途就是为子系统的复杂处理过程提供方便的调用方法,使得子系统更加容易被使用。Façade对象通常属于单实例模式。