`

设计模式之 Facade - 外观模式

阅读更多

Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。
本文介绍设计模式中的外观(Facade)模式的概念,用法,以及实际应用中怎么样使用Facade模式进行开发。

Facade模式的概念
Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。

在应用系统中,为了实现某具有复杂功能的模块或子系统等时,往往需要为其设计和实现很多很小的类,也就是说,该模块或子系统是由一组具有类似功能的类群组合而成。这样一来,怎么调用这些类就成了问题。Facade就是这样一种模式,设计一个被称为facade的类,该类提供一个简单的调用接口:
- 隐藏具体的实现细节,简化调用关系。
- 使得调用方的代码更加简洁明了。
- 通过facade,降低外部调用类与内部被调用类间的耦合程度。
- 可以为每个不同的任务需要,准备经过良好设计的简易的API。

Facade模式可以用下面的类图来表示:
 
 
 
Facade
    为调用方定义简单的调用接口。
Clients
    调用者。通过Facade接口调用提供某功能的内部类群。
Packages
    功能提供者。指提供功能的类群(模块或子系统)。

Facade模式与Adapter模式的区别
Facade模式与Adapter模式存在着相当的相似之处:为即存的类提供界面统一的接口,以供外部类调用。
但Facade模式的目的是简化调用关系;Adapter模式是为不同的模块/子系统提供一个统一的接口(支持多态),旨在将一个或多个已经存在的不统一的接口转化成为另一个统一的接口。
举例说明:
1,Adapter模式:
有银行A系统,银行B系统,它们具有大致一样的功能,但它们的对外接口各不一样。
如果需要在C系统中使用A系统或B系统,为了接口的一致,我们需要在C系统中实现一个Adapter,通过这个Adapter提供的接口,我们就可以透明的调用银行A系统的功能、或者银行B系统的功能了;
2,Facade模式:
有银行A系统,它具有非常复杂的功能,有融资,贷款,存款,取款,信用审查,担保等等功能,
如果需要在C系统中,只需用到A系统的一部分功能,比如融资,我们就可以为需要用到的融资功能封装一个Facade,通过这个facade,我们不用管A系统的内部是怎么实现融资业务的,也不用管信用审查是否通过,是否具有充分的担保资源等等,大大简化了客户端的调用。


Facade模式的模型:

A系统有A1, A2, A3等类。客户端需要调用A系统的的A1.doSomething1();A2.doSomething2();A3.doSomething3()来完成某功能。
Facade模式的实现模型就是:

A系统:

class A1 {
    public void doSomething1();
}

class A2 {
    public void doSomething2();
}

class A3 {
    public void doSomething3();
}

Facade:
public class Facade {
    public void doSomething() {
        A1 a1 = new A1();
        A1 a2 = new A2();
        A1 a3 = new A3();

        a1.doSomething1();
        a2.doSomething2();
        a3.doSomething3();
    }
}


Test:
public class Client {
    public static void main(String []args) {
        Facade facade = new Facade();
        facade.doSomething();
    }
}
分享到:
评论

相关推荐

    facade-demo(外观模式示例)

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

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 外观模式(Facade):提供一个统一的接口,用来访问子系统的一组接口。 - 适配器模式(Adapter):使两个接口不兼容的类能够协同工作。 - 桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以独立变化。...

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

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

    C# 设计模式系列教程-外观模式

    【外观模式】是一种设计模式,它在C#和其他面向对象编程语言中被广泛使用,以降低客户端代码与复杂子系统间的耦合度。外观模式的核心思想是为子系统的多个组件提供一个统一的入口点,使得客户端只需要与这个单一的...

    c++-设计模式之外观模式(Facade Pattern)

    外观模式(Facade Pattern)是一种结构型设计模式,用于为复杂子系统提供一个简单的接口。它通过封装系统内部的复杂性,提供一个统一的接口,使得客户端能够更加方便地使用子系统的功能。这种模式通常用于简化代码、...

    设计模式之外观模式 facade

    外观模式(Facade Pattern)是设计模式中的一种结构型模式,主要目的是为了解决复杂的系统接口问题,提供一个简单的统一入口,使得客户端可以更方便地使用系统。在Java中,外观模式通常用来隐藏系统的复杂性,对外只...

    设计模式--外观模式java例子

    **外观模式(Facade Pattern)**是软件设计模式中的一种结构型模式,它的主要目的是为了解耦复杂的系统,提供一个统一的接口,使得客户端可以更容易地使用这个系统。在Java编程中,外观模式的应用广泛,尤其是在处理...

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

    设计模式面面观(13):外观模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/17/2299641.aspx

    设计模式学习之Facade(外观模式)

    **外观模式(Facade)**是软件工程中一种常用的设计模式,它为复杂的系统或子系统提供了一个统一的入口点,简化了客户端与复杂系统之间的交互。这种模式将客户端与子系统的内部实现细节隔离开来,使得客户端只需要...

    设计模式之Facade

    **设计模式之Facade** Facade(外观)设计模式是一种结构型设计模式,它的主要目的是为复杂的系统提供一个统一的、简单的接口,使得客户端可以避免与系统的内部复杂性进行交互。Facade模式将子系统的多个组件组合在...

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

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

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

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

    设计模式PPT---25种设计模式详解

    5. 外观模式(Facade):为子系统提供一个统一的接口,简化了客户端与其交互。 6. 享元模式(Flyweight):为了减少大量相似对象的创建,共享内存中的对象。 7. 代理模式(Proxy):为其他对象提供一种代理以控制对...

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

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

    设计模式 - 外观模式(C++实例)

    **外观模式(Facade)**是一种结构型设计模式,它的主要目的是为了解耦复杂的系统,提供一个简单的接口,使得客户端可以更方便地使用系统的子系统。在C++编程中,外观模式的应用尤为常见,因为它能够有效地降低系统...

    JAVA设计模式chm文档

    设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...

    Java设计模式 设计模式介绍

    章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor

    C#设计模式-外观模式

    **外观模式(Facade Pattern)**是软件工程中一种常用的设计模式,它为复杂的子系统提供了一个简单的接口,使得客户端代码可以更容易地与这些子系统交互。在C#中,外观模式同样被广泛应用,以降低系统的复杂性,提高...

    c++设计模式-结构型模式-外观模式

    c++设计模式-结构型模式-外观模式;qt工程;c++简单源码; 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,...

Global site tag (gtag.js) - Google Analytics