设计模式之Facade模式(外观模式)
2016-04-22 10:17
190 查看
Facade模式(外观模式),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。 我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。打个比方,我们去吃饭,要了一份西红柿炒鸡蛋,我们只关心最后西红柿炒鸡蛋能够端上了,并不关心具体怎么做的,比如洗西红柿,切西红柿,拌开鸡蛋,炒西红柿鸡蛋等过程。
1.首先定义三个具体实现类的步骤
2.设计外观类
3实际调用
4.适用性
在以下情况下可以考虑使用外观模式:
(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
优点
(1)实现了子系统与客户端之间的松耦合关系。
(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
注:上述4参考百度百科
1.首先定义三个具体实现类的步骤
#pragma once #include <stdio.h> class CSystem1 { public: CSystem1(void); virtual ~CSystem1(void); public: void Operation1(); }; #include "System1.h" CSystem1::CSystem1(void) { } CSystem1::~CSystem1(void) { } void CSystem1::Operation1() { printf("洗,切西红柿\n"); }
#pragma once #include <stdio.h> class CSystem2 { public: CSystem2(void); virtual ~CSystem2(void); public: void Operation2(); }; #include "System2.h" CSystem2::CSystem2(void) { } CSystem2::~CSystem2(void) { } void CSystem2::Operation2() { printf("拌开鸡蛋\n"); }
#pragma once #include <stdio.h> class CSystem3 { public: CSystem3(void); virtual ~CSystem3(void); public: void Operation3(); }; #include "System3.h" CSystem3::CSystem3(void) { } CSystem3::~CSystem3(void) { } void CSystem3::Operation3() { printf("炒西红柿鸡蛋\n"); }上面设计了三个具体实现的类,下面定义外观类
2.设计外观类
#pragma once #include "System1.h" #include "System2.h" #include "System3.h" class CFacade { public: CFacade(void); virtual ~CFacade(void); public: void Operation(); private: CSystem1* Sub1; CSystem2* Sub2; CSystem3* Sub3; }; #include "Facade.h" CFacade::CFacade(void) { Sub1=new CSystem1(); //在外观类里面构造 Sub2=new CSystem2(); Sub3=new CSystem3(); } CFacade::~CFacade(void) { } void CFacade::Operation() { Sub1->Operation1(); //再外观类里面调用 Sub2->Operation2(); Sub3->Operation3(); }
3实际调用
#pragma once #include "Facade.h" int main() { CFacade* Fade=new CFacade(); //只用对外面暴露一个借口即可 Fade->Operation(); return 0; }
4.适用性
在以下情况下可以考虑使用外观模式:
(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
优点
(1)实现了子系统与客户端之间的松耦合关系。
(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
注:上述4参考百度百科
相关文章推荐
- C++实验3-2
- How to overcome “datetime.datetime not JSON serializable” in python?
- ASP.NET中 ListBox列表框控件的使用方法
- HBase总结(七)LSM理解
- HDU4737 A Bit Fun 位运算
- 欢迎使用CSDN-markdown编辑器
- 7(进程环境)
- [概率 树形DP] BZOJ 3566 [SHOI2014]概率充电器
- 微信支付 常见报错
- java中instanceof,如果a instanof B的问题?
- ResourceBundle和Locale
- 手机网页中 唤醒拨打电话和发送短信,浏览器和微信浏览器都可以用
- NumPy简明教程
- WebViewJavascriptBridge报错
- 在VS 编译sqlite3导出dll
- 人脸识别系统
- Javascript正则表达式完全学习手册
- 查看SAP所有报表的事物代码
- Android studio 使用Gsonformat插件快速生成javabean
- iframe异步提交