`

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模式。

 

分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) (Level 300)

    **外观模式(Facade Pattern)**是面向对象设计模式中的一种结构型模式,它提供了一个统一的接口,用于访问子系统中的各个部分。在C#编程中,外观模式可以帮助我们简化复杂的系统接口,使得客户端代码与复杂的内部...

    C#面向对象设计模式纵横谈\11 结构型模式Facade外观模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第11节:结构型模式Facade外观模式

    Facade 外观模式(结构型模式)

    C#面向对象设计模式纵横谈\C#面向对象设计模式纵横谈\10.Facade 外观模式(结构型模式).wmv )

    C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式)

    本篇文章将深入探讨C#面向对象设计模式中的Facade外观模式,这是一种结构型模式,旨在通过提供一个统一的接口来简化复杂的子系统。文章通过具体的例子和代码展示了如何在实际开发中运用这一模式,并解释了它与其他几...

    facade-demo(外观模式示例)

    **外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端代码能够更容易地使用这些系统或子系统。在Java编程中,外观模式常常被用来简化多模块间的交互,降低...

    设计模式之外观模式(Facade Pattern)

    **外观模式(Facade Pattern)**是一种结构型设计模式,它主要解决的是复杂系统或子系统对外暴露一个简单统一的接口,使得客户端无需关心内部复杂的交互细节。这种模式在实际开发中广泛应用,尤其在大型项目中,它能...

    java 设计模式 Facade外观模式 Simple Factory 简单工厂模式

    外观模式是一种结构型设计模式,它的主要目标是提供一个统一的接口,用来简化对复杂系统的访问。在Java中,当你有一个复杂的子系统,而你希望客户端代码能够以一种更简洁、更易于理解的方式来与之交互时,就可以使用...

    设计模式专题之(十一)外观模式---设计模式外观模式示例代码(python--c++)

    外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。外观模式使子系统更容易被使用,因为它为复杂的子系统提供了一个简单的接口,客户端可以通过这个接口与子...

    23种 设计模式---面向对象的基本原则

    2. 结构型模式(Structural Patterns): - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 - 外观模式(Facade):为子系统提供一个统一的接口,使得子系统更加易于使用。 - 适配器模式...

    PHP设计模式(九)外观模式Facade实例详解【结构型】

    外观模式是一种结构型设计模式,其主要目的是为了解决复杂的系统划分成多个子系统后,如何降低子系统间的耦合度,提高系统的可维护性和可扩展性。它通过提供一个统一的接口,使得外部客户端可以直接与这个接口交互,...

    Ajax中使用Facade外观模式的Eclipse版本的Demo

    其中,Facade模式是一种结构型设计模式,它的主要目的是为子系统提供一个统一的接口,以减少客户端与子系统之间的耦合。在Ajax开发中,Facade模式可以帮助我们封装复杂的异步请求处理逻辑,提供简洁的调用方式。 **...

    设计模式--可复用面向对象软件的基础(中文)

    2. **结构型模式**:这些模式处理对象组合和类结构,例如适配器模式(Adapter)用于接口转换,装饰器模式(Decorator)用于动态增加对象功能,代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问,桥接...

    [结构型模式] 外观模式的理解

    外观(Facade)模式是一种设计模式,属于结构型模式,它提供了一个统一的接口,用来访问子系统中的一组接口。这种模式定义了一个高层接口,使得这一子系统更加容易使用。外观模式的主要目的是减少系统内部组件之间的...

    FACADE模式

    **外观(Facade)模式**是一种结构型设计模式,它的主要目的是提供一个统一的接口,用于客户端访问复杂的子系统。在大型软件系统中,通常由多个模块或子系统组成,每个子系统都有自己的功能,而客户端可能需要与这些...

    《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式

    2. **结构型模式**:处理对象的组合,封装复杂的关联关系为简单的接口,使得设计更为灵活。 - **适配器模式**(Adapter):将一个类的接口转换为客户期望的另一个接口。 - **桥接模式**(Bridge):将抽象与其实现...

    C#面向对象设计模式纵横谈(视频与源码)

    C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式) C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式) C#面向对象设计模式...

    java常用设计模式-外观模式

    外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口来访问复杂系统中的子系统,从而隐藏了子系统的复杂性。外观模式属于对象型模式,它通过创建一个外观类,将客户端与子系统解耦,使得客户端...

    外观模式 - 代码(Java)

    **外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个统一的入口点,简化了客户端与其交互的方式。在Java中,外观模式的应用可以帮助我们更好地组织代码,降低系统的耦合度,并提高...

    外观模式 Facade Pattern

    外观模式是一种重要的设计模式,属于结构型模式之一。其核心在于通过引入一个简单的接口来隐藏一个系统中存在的复杂性,从而简化了客户端对该系统的使用。该模式的主要目的是降低客户端与系统内部各部分之间的耦合度...

Global site tag (gtag.js) - Google Analytics