zoukankan      html  css  js  c++  java
  • (结构型模式)Facade——外观模式

    1、意图

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

    2、核心思想

         外部与一个子系统的通信必须通过一个统一的外观对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个外观类,而且此外观类只有一个实例,也就是还说它是一个单例模式。但整个系统可以有多个外观类。

    3、优缺点分析

    GOOD:

    为子系统的一组接口提供一个一致的界面。使用户使用起来更加方便。

    完美体现了依赖倒转原则和迪米特原则

    适用情况:

    分三个阶段:

    1、首先,在设计初期阶段,应该有意识的将不同的两个层分离,即在层与层之间建立外观Facade

    2、其次,在开发阶段,子系统往往因为不断的重构演化,而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。

    3、在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,就可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

    4、标准UML图

    clip_image002

    外观类:

    Facade:知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。所以它需要了解所有的子系统的方法或属性,进行组合,以备外界调用。

    (与外观类相关联)子系统类集合:

    SubSystem Classes:实现了子系统的具体功能,处理Facade对象指派的任务。(注意:子系统类中没有任何Facade的信息,既没有对Facade对象进行引用

    5、标准源码

       1: #include<iostream>
       2: #include <string>
       3: using namespace std;
       4:  
       5: class SubSysOne
       6: {
       7: public:
       8:     void MethodOne()
       9:     {
      10:         cout<<"方法一"<<endl;
      11:     }
      12: };
      13:  
      14: class SubSysTwo
      15: {
      16: public:
      17:     void MethodTwo()
      18:     {
      19:         cout<<"方法二"<<endl;
      20:     }
      21: };
      22:  
      23: class SubSysThree
      24: {
      25: public:
      26:     void MethodThree()
      27:     {
      28:         cout<<"方法三"<<endl;
      29:     }
      30: };
      31:  
      32: //外观类
      33: class Facade
      34: {
      35: private:
      36:     SubSysOne* sub1;
      37:     SubSysTwo* sub2;
      38:     SubSysThree* sub3;
      39: public:
      40:     Facade()
      41:     {
      42:         sub1 = new SubSysOne();
      43:         sub2 = new SubSysTwo();
      44:         sub3 = new SubSysThree();
      45:     }
      46:     ~Facade()
      47:     {
      48:         delete sub1;
      49:         delete sub2;
      50:         delete sub3;
      51:     }
      52:  
      53:     void FacadeMethod()
      54:     {
      55:         sub1->MethodOne();
      56:         sub2->MethodTwo();
      57:         sub3->MethodThree();
      58:     }
      59: };
      60:  
      61: //客户端
      62: int main()
      63: {
      64:     Facade* test = new Facade();
      65:     test->FacadeMethod();
      66:     return 0;
      67: }
  • 相关阅读:
    js021-Ajax与Comet
    Android之应用程序基础
    Android之项目的目录结构
    Android之ContentProvider组件
    Android之BroadcastReceiver组件
    Android之Activity组件
    Android之Service组件
    2.绘制简单的几何图形
    1.一个简单的OpenGL程序
    2.由深拷贝和浅拷贝引发的写时拷贝技术
  • 原文地址:https://www.cnblogs.com/steven_oyj/p/1747864.html
Copyright © 2011-2022 走看看