Facade——外观模式
Posted 弗莱曼飞侠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Facade——外观模式相关的知识,希望对你有一定的参考价值。
Facade外观模式,也是比较常用的一种模式,基本上所有软件系统中都会用到。 GOF 在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简单说,就是将复杂的逻辑封装起来,对外公开简单的接口,由客户程序调用。客户对象通过一个外观接口读写子系统中各接口的数据资源。
适用情景:
(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
(2)开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
(3)维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
优点:
(1)降低了子系统与客户端之间的耦合关系。
(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
外观模式类图:
下面我们来实现一个外观模式案例:
根据类图实现家庭影院外观模式应用;
(1).实现KTV模式:电视on,灯off,音响on,DVD off。
(2).实现游戏模式:电视on,音响on,游戏机on。
类图:
实现代码:
#include<iostream> using namespace std; class TV { public: void on() { cout << "TV打开" << endl; } void off() { cout << "TV关闭" << endl; } }; class XBox { public: void on() { cout << "XBox打开" << endl; } void off() { cout << "XBox关闭" << endl; } }; class Light { public: void on() { cout << "Light打开" << endl; } void off() { cout << "Light关闭" << endl; } }; class DVD { public: void on() { cout << "DVD打开" << endl; } void off() { cout << "DVD关闭" << endl; } }; class MikePhone { public: void on() { cout << "MikePhone打开" << endl; } void off() { cout << "MikePhone关闭" << endl; } }; class HomePlayer { public: void KTVMode() { tv.on(); light.off(); mike.on(); dvd.on(); } void GameMode() { tv.on(); mike.on(); xbox.on(); } private: TV tv; DVD dvd; MikePhone mike; Light light; XBox xbox; }; int main(void) { HomePlayer hp; cout << "进入KTV模式" << endl; hp.KTVMode(); cout << "进入Game模式" << endl; hp.GameMode(); return 0; }
运行结果:
以上是关于Facade——外观模式的主要内容,如果未能解决你的问题,请参考以下文章