外观/门面模式(Facade)
来源:互联网 发布:成人认字的软件 编辑:程序博客网 时间:2024/06/03 01:58
2015/4/28
外观/门面模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
#include <vector>#include <iostream>using namespace std; class Base{ public: virtual void Product()=0;};class ProductA:public Base{ public: void Product() { cout<<"A"<<endl; }};class ProductB:public Base{ public: void Product() { cout<<"B"<<endl; }};class ProductC:public Base{ public: void Product() { cout<<"C"<<endl; }};template <typename T>class Facade{ private: vector <T> vec; public: void Add(T t) { vec.push_back(t); }/*可以定义多个函数实现不同的遍历顺序在此处我们是如何进入就如何输出,类似于队列*/ void Product() { vector <T>::iterator it;//typename for(it=vec.begin();it!=vec.end();it++) (*it)->Product(); } };int main(void){ Base *pa=new ProductA(); Base *pb=new ProductB(); Base *pc=new ProductC(); /*以下是外观模式核心*/Facade <Base *> p; p.Add(pa); p.Add(pb); p.Add(pc); p.Product(); return 0;}
何时使用外观模式(摘自大话设计模式):
首先,在设计初期阶段,应该要有意识的将不同的两个层分离。
其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大所属的模式使用时也都会产生很多很小的类,这本是好事,也给外部调用带来了巨大的困难,增加外观Façade可以提供一个简单的接口,减少它们之间的依赖。(可以理解成将非常复杂的各种模式打包起来,我们只需要提供借口)
第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它暴汗非常重要的功能,新的需求开发必须要依赖于他,那么可以外新系统开发一个外观类Façade,让新系统与Façade交互。
0 0
- Facade 外观(门面)模式
- 外观/门面模式(Facade)
- 门面模式(外观模式):Facade
- Facade(外观模式,门面模式)
- Java Facade (外观模式、门面模式)
- 8.外观模式/门面模式(Facade)
- 门面模式(外观Facade模式)
- 外观模式(门面模式)--Facade
- 门面模式(Facade 外观模式,对象结构型模式)
- 外观模式(Facade Pattern)或门面模式
- 外观模式/ 门面模式(Facade Pattern)
- facade pattern--门面模式或外观模式
- 门面(Facade)模式
- 门面(Facade)模式
- 门面(Facade)模式
- 门面(Facade)模式
- 门面(Facade)模式
- 门面(facade)模式
- Git操作-分支管理(二)
- 二叉搜索树
- 分析JSP后台文件管理源代码
- operator
- org.apache.http.conn.HttpHostConnectException: Connection to refused
- 外观/门面模式(Facade)
- 数据结构——模式匹配(KMP算法)
- 百度地图开发之【公交信息检索】
- 数字在排序数组中出现的次数
- 装饰模式(Decorator)
- 系统出错, 发生系统错误 1067, 进程意外终止. 解决方法
- ubunutu 更改grub等待时间
- Basket Call Option via C++
- 浅谈JAVA设计模式之——适配器模式(Adapter)