C++设计模式之外观模式(三)

3、外观模式总结

引入了外观类,解除了客户类与子系统的耦合性。客户类不需要直接操作子系统,而是由外观类负责处理,对客户端而言是透明的,客户类只需要操作外观类就可以了,符合"迪迷特法则"。如果多个地方需要Facade,也就是说外观可以实现功能的共享,也就是实现复用,同样的调用代码只用在Facade里面写一次就好了,不用在多个调用的地方重复写。如果某个系统模块需要修改,只需要修改这个系统模块就可以了,对客户端无影响,维护性好。还有一个潜在好处,对使用Facade的人员来说,Facade节省了他们的学习成本,他们只需要了解Facade即可,无需深入到子系统内部,去了解每个模块的细节,也不用和多个模块交互,从而使得开发简单,学习也容易。

现在的系统是越做越大,越来越复杂,对软件的要求也越来越高。为了提高系统的可重用性,通常会把一个大的系统分为多个子系统,再把一个子系统分成很多更小的子系统,一直分下去,分到一个个小的模块,这样一来子系统的重用性就会得到加强。但这也带来一个问题,由于模块增加,对象之间的耦合性也随之增强了。外观模式可以解决这个问题,由外观来对各个子模块子系统进行处理,客户端只需要操作外观就可以了。

通常在三层架构中就需要考虑在数据访问层和业务逻辑层、业务逻辑层和UI层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的结构,使得耦合大大降低。例如:在UI层定义一个外观对象,外观负责对应用层的子系统进行处理,当UI层有请求时,通过UI层的外观委托给应用层的子系统进行处理。同样可以在应用层定义一个外观对象,当应用层请求对数据进行处理的时候,通过应用层的外观委托给数据层中的模块对数据进行处理。

1.外观模式优点

外观模式的主要优点如下:

(1) 它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少,符合“迪米特法则”。

(2) 它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可。

(3) 一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。

(4)外观对象负责对子系统进行处理,如果某个子系统进行了修改,可能只需要修改外观对象就可以了,维护性好。如果没有使用外观对象,则某个子系统进行了修改,则如果有多个客户端使用到这个子系统,则这些客户端都得进行修改,维护性差。

(5)多个客户端可以复用外观Facade,复用性好。

(6)符合多用组合少用继承原则。

2.外观模式缺点

外观模式的主要缺点如下:

(1) 不能很好地限制客户端直接使用子系统类,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活 性。

(2) 如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则。

3. 外观模式适用场景

(1) 当要为访问一系列复杂的子系统提供一个简单入口时可以使用外观模式。

(2) 客户端程序与多个子系统之间存在很大的依赖性。引入外观类可以将子系统与客户端解耦,从而提高子系统的独立性和可移植性。

(3) 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度

4.外观模式具体应用

(1)邮件业务系统的开发: 发信人只需要把发送内容,接收地址告诉邮局,邮局系统代为发送处理。邮局系统充当外观角色。

(2)绝大多数系统都有一个首页或者导航页面,同时也提供了菜单或者工具栏,在这里,首页和导航页面、菜单和工具栏就是外观角色,通过它们用户可以快速访问子系统,降低了系统的复杂程度。

(3)KTV点歌系统的开发: 提供一个外观用来处理显示器模块、音响模块、灯光模块操作。

(4)文件安全传送模块开发: 存在三个模块,读取文件内容模块,对文件内容进行加密模块和写入文件模块。提供一个外观,对这些模块进行处理。

(5)在三层架构中,UI层和业务逻辑层提供一个外观,业务逻辑层和数据访问层提供一个外观,这样可以为复杂的子系统提供一个简单的结构。

(6)生活中的外观: 找电脑组装公司组装电脑; 通过中介来处理房屋的买卖;

时间: 2024-10-26 05:21:59

C++设计模式之外观模式(三)的相关文章

【设计模式】外观模式

外观模式:它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用.这其实就是一个分层的思想,将较低层复杂的操作交由较高层同一管理,并向用户程序提供简单易用的接口.下面是一个用C++编写的外观模式的例子. #include <iostream> #include <string> using namespace std; // 键盘类 class Keyboard { public: string Type(const string &input) { retur

C++设计模式之建造者模式(三)

4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外,还可以通过Director类来更加精细地控制产品的创建过程,例如增加一类称之为钩子方法(HookMethod)的特殊方法来控制是否对某个buildPartX()的调用,也就是判断产品中某个部件是否需要被建造.钩子方法的返回类型通常为boolean类型,方法名一般为isXXX(),钩子方法定义在抽象建造者类中.在抽象建造者类中提供钩子方法的默认实现,具体建造者类如果不需要建造某个部件,则该建造者类覆盖抽象建造者类的钩子方法.

设计模式之外观模式(Facade)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

【设计模式】——外观模式

外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式结构图: 代码模板: //四个子系统的类class SubSystemOne{public:    void MethodOne()    {        cout << "子系统方法一" << endl;    }};class SubSystemTwo{public:    void MethodTwo()    {  

设计模式之外观模式(九)

设计模式之外观模式 一.引言 当一个复杂的系统由多个复杂的子系统构成,然后客户端调用会调用多个子系统.这时,客户端会和多个子系统耦合在一起,当子系统需要扩展或者改变时,客户端也要随之改变,我们可以使用外观模式将客户端和子系统进行解耦. 二.介绍 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口. 何时使用: 1.客户端不需要知道系统内部的复杂联系,整个系统只需提供

C#设计模式(11)——外观模式(Facade Pattern)

一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 "门面"模式.下面就具体介绍下外观模式. 二.外观模式的详细介绍 2.1 定义 外观模式提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用.使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内

设计模式之代理模式 (三)

代理模式也叫委托模式. 一.定义: 代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象.这些额外的操作通常需要与实际对象进行通信. 二.角色定义 抽象角色:声明真实对象和代理对象的共同接口: 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象

java设计模式之外观模式(门面模式)

针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下. 一.概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.这种类型的设计模式属于结构性模式.为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用. 二.角色及使用场景 简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用.这个模式中,设计到3个角色. 1).门面角色:外观模式的核心.它被客户角色调用,它熟悉子系统的功

11.设计模式_外观模式

一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 "门面"模式.下面就具体介绍下外观模式. 二.外观模式的详细介绍 2.1 定义 外观模式提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用.使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内