Facade(外观)-对象构造型模式

Facade(外观)---对象结构型模式

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

将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。引入一个外观(Facade)对象,它为子系统中较一般的设施提供了一个单一而简单的界面。它给用户提供了一个单一而简单的子系统接口。无需完全隐藏实现功能的那些类,即可将它们结合在一起。

当你要为一个复杂子系统提供一个简单接口时,Facade可以提供一个简单的缺省试图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。

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

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

Facade,知道哪些子系统类负责处理请求。将客户的请求代理给适当的子系统对象。

被代理的子系统,处理由Facade对象指派的任务。没有Facade的任何相关信息,即没有指向Facade的指针。

客户程序通过发送请求给Facade的方式与子系统通讯,Facade将这些消息转发给适当的子系统对象。尽管是子系统中的有关对象在做实际工作,但Facade模式本身也必须将它的接口转换成子系统的接口。使用Facade的客户程序不需要直接访问子系统对象。

 

Facade模式优点:

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

2、它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。Facade模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。Facade模式可以消除复杂的循环依赖关系。这一点在客户程序与子系统是分别实现的时候尤为重要。

用抽象类实现Facade而它的具体子类对应于不同的子系统实现,这可以进一步降低客户与子系统的耦合度。客户就可以通过抽象的Facade类接口与子系统通讯。

 

Abstract Factory 模式可以Facade模式一起使用以提供一个接口,这一接口可用来以一种子系统独立的方式创建子系统对象。Abstract Factory也可以代替Facade模式隐藏那些与平台相关的类。

Mediator模式与Facade模式的相似之处是,它抽象了一些已有的类的功能。然而,Mediator模式的目的是对同事之间的任意通讯进行抽象,通常集中不属于任何单个对象的功能。Mediator的同事对象知道中介者并与它通信,而不是直接与其他同类对象通信。相对而言,Facade模式仅对子系统对象的接口进行抽象,从而使它们更容易使用,它并不定义新功能,子系统也不知道Facade的存在。

通常来讲,仅需要一个Facade对象,因此Facade对象通常属于Singleton模式。