11 结构型模式-----外观模式

模式动机(Facade Pattern)在设计一个复杂系统时,一般会将其分解为若干个具有特定功能的子系统以便于分析设计,这样的话就会导致数量众多的子系统接口出现,使得与调用者的交互变得复杂了。解决办法是在所有子系统的上一层提供一个外观类(Facade),其负责对所有子系统的统一调用,客户只需和外观类交互即可。

模式结构图:

模式代码:

bt_外观模式.h

 1 #ifndef FP_H
 2 #define FP_H
 3 #include <iostream>
 4
 5 /*
 6     定义子系统SubSys*
 7 */
 8 class SubSysA
 9 {
10 public:
11     void UseSysA(){ std::cout << "Use SubSystem A" << std::endl; }
12 };
13 class SubSysB
14 {
15 public:
16     void UseSysB(){ std::cout << "Use SubSystem B" << std::endl; }
17 };
18 class SubSysC
19 {
20 public:
21     void UseSysC(){ std::cout << "Use SubSystem C" << std::endl; }
22 };
23
24 /*
25     定义外观类Facade
26 */
27 class Facade
28 {
29 public:
30     void Operation()
31     {
32         pa->UseSysA();
33         pb->UseSysB();
34         pc->UseSysC();
35     }
36
37 private:
38     SubSysA* pa;
39     SubSysB* pb;
40     SubSysC* pc;
41 };
42
43 #endif // FP_H

测试用例.cpp

 1 #include "bt_外观模式.h"
 2
 3 int main()
 4 {
 5     std::cout << "***** 外观模式测试 *****" << std::endl;
 6     Facade* pf = new Facade;
 7     pf->Operation();
 8     delete pf;
 9
10     return 0;
11 }

模式分析:

1》 外观模式降低了客户与子系统之间的耦合性,使得客户端编码更加简洁。 如果用抽象接口设计Façade类,由具体的Facade子类对应不同的子系统的实现,那么可以进一步降低客户与子系统之间的耦合。

2》 如果客户对于子系统设计比较熟悉,那么可以跳过外观类直接访问子系统的接口。

3》 在系统分层设计时,可以考虑使用外观类作为层间接口,这样可以降低不同层次之间的依赖。

4》 一个系统可以同时拥有多个外观类,使得每个外观类负责固定区域子系统,这样有时候便于管理。

5》 在增加新的子系统时,必须修改外观类代码,此时如果将外观类设计为接口类,那么只需修改其具体实现类即可,可以确保与客户之间的接口保持不变。

时间: 2024-09-29 01:54:32

11 结构型模式-----外观模式的相关文章

设计模式(结构型)之外观模式(Facade Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之装饰者模式(Decorator Pattern)>http://blog.csdn.net/yanbober/article/details/45395747 概述 一个客户类需要和多个业务类交互,而这些业务类经常会作为整体出现,由于涉及到的类比较多,导致使

java语言实现结构型设计模式—外观模式

一.描述 外观模式又叫门面模式,就是对一个复杂的系统进行包装,该系统对外的接口统一由外观类提供.当一个复杂的系统需要对外提供接口时,就需要将对外提供的接口统一封装在一个外观类中供外系统使用.外观模式最大的特点就是将细粒度的对象包装成粗粒度的对象,应用程序通过访问这个外观对象来完成细粒度对象的调用.这样应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. 总的来说,外观模式就是为子系统对外提供的一组接口,这组接口提供一个统一的界面,使得其它

&quot;围观&quot;设计模式(14)--结构型之外观模式(Facade Pattern)

外观模式(Facade pattern),是软件工程中常用的一种软件设计模式,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用.----WIKIPEDIA 个人理解 当一个项目中出现比较杂乱的调用关系时,类与类之间的耦合关系过于复杂,为了降低耦合度,我们可以采用一个公共的接口与其他类发生耦合,这样可以尽量大的降低外界与该系统的耦合度,同时降低了整个系统的复杂度,外观模式相当于一个公共的入口一样,为使用者敞开大门,暴漏一些必要的接口,方便外界进行调用.通俗来讲就是,有多个不同的类

设计模式(结构型)之组合模式(Composite Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之桥接模式(Bridge Pattern)> http://blog.csdn.net/yanbober/article/details/45366781 概述 组合模式又叫做部分-整体模式,使我们在树型结构的问题中模糊简单元素和复杂元素的概念,客户程序可以像

门面模式/外观模式

原文链接:http://www.tutorialspoint.com/design_pattern/facade_pattern.htm Facade Pattern(门面模式/外观模式) 隐藏了系统的复杂性,为客户端访问系统提供了一个接口.Facade Pattern 属于结构型模式的一种,通过添加一个接口来隐藏现有系统的复杂性. Facade Pattern 涉及到一个类,这个类代理调用了现有系统的类的一些方法,从而为客户端提供了简化的方法来访问系统. 实现 我们将会创建一个 Shape 接

第12章 结构型模式—外观模式

1. 外观(门面)模式(Facade Pattern)的定义 (1)为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. ①这里说的界面是指从一个组件外部来看这个组件,能够看到什么,也就是外观.如从一个类外部看这个类,那么这个类的public方法或接口就是他的外观. ②这里所说的“接口”是指外部和内部交互的一个通道(方法),可以是类的方法,也可以是interface的方法. (2)外观模式的结构和说明 ①Façade:定义子系统的多个模

java设计模式--结构型模式--外观模式

1 外观模式 2 概述 3 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 4 5 6 适用性 7 1.当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不断演化而变得越来越 8 复杂.大多数模式使用时都会产生更多更小的类.这使得子系统更具可重用性,也更容 9 易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难. 10 Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需

设计模式--结构型模式--外观模式

医院的例子: 现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统.如果把医院作为一个子 系统,按照部门职能,这个系统可以划分为挂号.门诊.划价.化验.收费.取药等.看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的 各个类打交道一样,不是一件容易的事情. 首先病人必须先挂号,然后门诊.如果医生要求化验,病人必须首先划价,然后缴费,才可以到化验部门做化验.化验后再回到门诊室. 上图描述的是病人在医院里的体验,图中的

设计模式(结构型)之代理模式(Proxy Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之享元模式(Flyweight Pattern)>http://blog.csdn.net/yanbober/article/details/45477551 概述 代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个