Facade 外观对象结构模式

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

     Facade 的意图是希望简化原有系统的使用方式,定义自己的接口。当我们只需要使用某个复杂系统的子集,或者,需要以一种特殊的方式与系统交互时,可以使用 Facade 模式。Facade 适用于模式适用于:

1)当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类,这使得子系统更具有可重用性,也更容易对子系统进行定制,但也给那些不需要定制子系统的用户带来一些使用上的困难。Facade 可以提供一个简单的缺省视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过 Facade 层。

2)客户程序与抽象类的实现部分之间存在着很大的依赖性。引入 Facade 将这个子系统与客户以及其它的子系统分离,可以提高子系统的独立性和可移植性

3)当你需要构建一个层次结构的子系统时,使用 facade 模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们通过 facade 进行通讯,从而简化了它们之间的依赖关系。

Facade 的简单结构图如下:

 Facade

Facade 模式的想法及结构图都非常简单,但却是应用最广泛的模式之一。以上类图可能太过简单,不足以表达 Facade 模式的真正涵义,设计模式一书给出的结构图更能表示 Facade 的作用:

facade1

Facade 知道哪些子类系统负责处理请求,将客户的请求代理给适当的子系统对象。SubSystem 实现子系统的功能,处理由 Facade 对象指派的任务,子系统没有 Facade 的任务相关信息,即没有指向 facade 的指针。Facade 将客户发送的请求转发给适当的子系统对象,尽管子系统中的有关对象在做实际工作,但 Facade 模式本身也必须将它的接口转换成子系统的接口。使用 Facade 的客户不需要直接访问子系统对象。

Facade 的简单代码如下:

   1:  //Facade.h
   2:  #pragma once
   3:  #include 
  
  
   4:   
   5:  class Subsystem1
   6:  {
   7:  public:
   8:      Subsystem1(){    }
   9:      ~Subsystem1(){    }
  10:      void Operation()
  11:      {
  12:          std::cout << "Subsystem1 operation.." << std::endl;
  13:      }
  14:  };
  15:  class Subsystem2
  16:  {
  17:  public:
  18:      Subsystem2(){    }
  19:      ~Subsystem2(){    }
  20:      void Operation()
  21:      {
  22:          std::cout << "Subsystem2 operation.." << std::endl;
  23:      }    
  24:  };
  25:   
  26:  // Facade 
  27:  class Facade
  28:  {
  29:  public:
  30:      Facade()
  31:      {
  32:          _subs1 = new Subsystem1();
  33:          _subs2 = new Subsystem2();
  34:      }
  35:      ~Facade()
  36:      {
  37:          delete _subs1;
  38:          delete _subs2;
  39:      }
  40:   
  41:      void OperationWrapper()
  42:      {
  43:          _subs1->Operation();
  44:          _subs2->Operation();
  45:      }
  46:  private:
  47:      Subsystem1* _subs1;
  48:      Subsystem2* _subs2;
  49:  };
  50:   
  51:  int main()
  52:  {
  53:      Facade* f = new Facade();
  54:      f->OperationWrapper();
  55:   
  56:      return EXIT_SUCCESS;
  57:  }
  58:   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值