• 11,外观模式(Facade Pattern)是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。


    Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。

    适用于:

    为子系统中统一一套接口,让子系统更加容易使用。

     1 #include <iostream>
     2 using namespace std;
     3 
     4 class SubSystemA
     5 {
     6 public:
     7     void doThing()
     8     {
     9         cout << "SubSystemA run" << endl;
    10     }
    11 };
    12 
    13 class SubSystemB
    14 {
    15 public:
    16     void doThing()
    17     {
    18         cout << "SubSystemB run" << endl;
    19     }
    20 };
    21 
    22 class SubSystemC
    23 {
    24 public:
    25     void doThing()
    26     {
    27         cout << "SubSystemC run" << endl;
    28     }
    29 };
    30 
    31 
    32 class Facade
    33 {
    34 public:
    35     Facade()
    36     {
    37         sysA = new SubSystemA;
    38         sysB = new SubSystemB;
    39         sysC = new SubSystemC;
    40     }
    41     ~Facade()
    42     {
    43         delete sysA;
    44         delete sysB;
    45         delete sysC;
    46     }
    47 public:
    48     void doThing()
    49     {
    50         sysA->doThing();
    51         sysB->doThing();
    52         sysC->doThing();
    53     }
    54 protected:
    55 private:
    56     SubSystemA *sysA;
    57     SubSystemB *sysB;
    58     SubSystemC *sysC;
    59 };
    60 //普通方法
    61 void main1801()
    62 {
    63     SubSystemA *sysA = new SubSystemA;
    64     SubSystemB *sysB = new SubSystemB;
    65     SubSystemC *sysC = new SubSystemC;
    66 
    67     sysA->doThing();
    68     sysB->doThing();
    69     sysC->doThing();
    70     delete sysA;
    71     delete sysB;
    72     delete sysC;
    73     
    74     return ;
    75 }
    76 //外观模式
    77 void main1802()
    78 {
    79     Facade *f = new Facade;
    80     f->doThing();
    81     delete f;
    82 
    83 }
    84 
    85 void main()
    86 {
    87     //main1801();
    88     main1802();
    89     system("pause");
    90 }

    要点

    1.Facade模式对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。

    2.Facade模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。

    3.如果应用需要,它并不限制它们使用子系统类。因此你可以在系统易用性与通用性之间选择。

    4. 在外观模式中,通常只需要一个外观类,并且此外观类只有一个实例,换言之它是一个单例类。当然这并不意味着在整个系统里只能有一个外观类,而仅仅是说对每一个子系统只有一个外观类。或者说,如果一个系统有好几个子系统的话,每一个子系统有一个外观类,整个系统可以有数个外观类。

    5. 外观模式的用意是为子系统提供一个集中化和简化的沟通管道,而不建议向子系统加入新的行为。

    6. 外观模式注重的是简化接口,它更多的时候是从架构的层次去看整个系统,而并非单个类的层次。

    适用性和优缺点

    适用性

    1.为一个复杂子系统提供一个简单接口。

    2.提高子系统的独立性。

    3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。

    优点

    1. 松散耦合
        外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。即要点2.

    2.  简单易用
        外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟外观交互就可以了,相当于外观类为外部客户端使用子系统提供了一站式服务。

    3. 更好的划分访问层次
         通过合理使用Facade,可以帮助我们更好的划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到外观中,这样既方便客户端使用,也很好的隐藏了内部的细节。

    缺点          

    过多的或者是不太合理的Facade也容易让人迷惑,到底是调用Facade好呢,还是直接调用模块好。

  • 相关阅读:
    [纯C#实现]基于BP神经网络的中文手写识别算法
    【转载】Jedis对管道、事务以及Watch的操作详细解析
    redis 缓存用户账单策略
    redis 通配符 批量删除key
    explain分析sql效率
    mysql 常用命令大全
    【转载】实战mysql分区(PARTITION)
    mysql表名忽略大小写配置
    【转】微服务架构的分布式事务解决方案
    【转载】Mysql中的Btree与Hash索引比较
  • 原文地址:https://www.cnblogs.com/D-DZDD/p/7341953.html
Copyright © 2020-2023  润新知