4.5Fasade 外观模式
来源:互联网 发布:黑暗启示录2bt版java 编辑:程序博客网 时间:2024/06/06 10:56
意图:
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是外观模式的作用了,我们通过一个外观类定义一个高层接口,该接口中包含子系统的中的接口,这样客户端只需要通过外观类访问各种子系统就可以啦。
UML结构图:
例子:
大话设计模式上股票买卖的例子:将股票买卖工作从客户端转移到Fund类中,给Fund类托管。将复杂系统的内部子系统与客户程序之间的依赖解耦。
#include <iostream>using namespace std;class Stock1{public:void Sell(){cout<<"股票卖出"<<endl;}void Buy(){cout<<"股票买入"<<endl;}};class Stock2{public:void Sell(){cout<<"股票卖出"<<endl;}void Buy(){cout<<"股票买入"<<endl;}};class NationalDebt{public:void Sell(){cout<<"国债卖出"<<endl;}void Buy(){cout<<"国债买入"<<endl;}};class Realty{public:void Sell(){cout<<"房地产卖出"<<endl;}void Buy(){cout<<"房地产买入"<<endl;}};class Fund{private:Stock1 *stock1;Stock2 *stock2;NationalDebt *nationaldebt;Realty *realty;public:Fund(){stock1 = new Stock1();stock2 = new Stock2();nationaldebt = new NationalDebt();realty = new Realty();}~Fund(){delete stock1;delete stock2;delete nationaldebt;delete realty;}void BuyFund(){stock1->Buy();stock2->Buy();nationaldebt->Buy();realty->Buy();}void SellFund(){stock1->Sell();stock2->Sell();nationaldebt->Sell();realty->Sell();}};int main(int argc, char **argv){Fund *f = new Fund();f->BuyFund();f->SellFund();delete f;system("pause");return 0;}
通过外观模式客户端只需要访问Fund类中的成员就可以了,并不需要与具体的每个Stock1,Stock2和NationalDebt相关联。这大大降低了耦合性,同时也使得系统容易维护,易于扩展。若需要扩展股票类,只需要加入Stock类;若有了新的购买方案,只需要在Fund类中加一个BuyMethod方法。
使用:
(1)在设计初期阶段,应该有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层、业务逻辑层和表示层的层与层之间建立外观,这样可以为复杂的子系统提供一个简单的接口,使得耦合性大大的降低。
(2)在开发阶段,子系统往往因为不断的重构演化而变得原来越复杂,大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用它们的用户程序带来了使用上的困难,增加外观可以提供一个简单的接口,减少它们之间的依赖。
(3)在维护一个遗留的一个大型系统时,可能这个系统已经非常难以维护和扩展了,但是因为它包含非常重要的功能,新的系统开发必须依赖它,这时也可以应用外观模式。可以为新系统开发一个外观类,来提供粗糙和高度复杂的遗留代码的比较清晰、简单的接口,让新系统与外观类对象交互,外观类负责与遗留代码交互所有复杂的工作。这样分两个小组,一个小组开发外观类与老系统的交互,另一个小组只要了解外观类的接口,直接开发新系统调用这些接口就可以了。
- 4.5Fasade 外观模式
- 4.5外观模式(FACADE)
- 5.6 外观模式(4.5)
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 外观模式
- 经典makefile例子
- uva10635 - Prince and Princess(巧妙动归)
- hdu1385 flody+记录路径
- 怎么用github下载资源
- 程序员技术练级攻略
- 4.5Fasade 外观模式
- 超时时间已到。超时时间已到,但是尚未从池中获取连接
- svn权限管理
- Java编程中“为了性能”要做的几点
- SpringMVC3+Hibernate+MySQL CRUD 小案例(翻译)
- zoj 树状数组经典 ( 未解)
- Java从网络读取图片并保存至本地 .
- cookie ,session,servletContext的区分
- __asm__ __volatile__("": : :"memory")