zoukankan      html  css  js  c++  java
  • 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》 在增加新的子系统时,必须修改外观类代码,此时如果将外观类设计为接口类,那么只需修改其具体实现类即可,可以确保与客户之间的接口保持不变。

     

     

     

  • 相关阅读:
    【转】线程的7种状态及相互转换
    java timer 使用:
    LayoutInflater
    java中Thread与Runnable的区别
    php上传程序到服务器后出错smarty1259
    cakephp ajax
    纯真IP数据库的应用IP地址转化成十进制
    对数组里的元素进行排序
    smarty中的cache_id问题
    箴言
  • 原文地址:https://www.cnblogs.com/benxintuzi/p/4550928.html
Copyright © 2011-2022 走看看