美文网首页
设计模式之外观模式

设计模式之外观模式

作者: 老羊_肖恩 | 来源:发表于2017-06-13 16:17 被阅读27次

外观模式(Facade Pattern)也叫做门面模式,是一种比较常见的封装模式。其定义如下:
  Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use. 即:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口,是的子系统更易使用。
  外观模式注重“统一的对象”,也就是提供一个访问子系统的接口,除了这个接口,不允许任何访问子系统的行为发生,其通用类图如下图所示:


Facade.jpg

通过通用类图,我们说一下外观模式的角色:

  • Facade 外观角色类。客户端可以调用这个角色的方法。该角色知晓子系统的所有功能和责任。该角色会将客户端发送过来的请求委派到相应的子系统中,该角色一般没有实际的业务逻辑,只是一个委托类。
  • SubsystemClass 子系统角色。可以同时有1个或多个子系统。每个子系统都不是一个单独的类,而是一个类的集合。子系统并不知道Facade的存在,对于子系统而言,Facade只是一个客户端而已。
    下面是外观模式的通用代码:
//子系统-ClassA
public class ClassA{
    public void doSomething(){
        System.out.println("ClassA doSomething A...");
    }
}
//子系统-ClassB
public class ClassB{
    public void doSomething(){
        System.out.println("ClassB doSomething B...");
    }
}
//子系统-ClassC
public class ClassC{
    public void doSomething(){
        System.out.println("ClassC doSomething C...");
    }
}

//外观类
public class Facade{
    //被委托的对象
    private ClassA classA = new ClassA();
    private ClassB classB = new ClassB();
    private ClassC classC = new ClassC();
    
    //提供对外访问接口1
    public void doAnyThing(){
        this.classC.doSomething();
        this.classB.doSomething();
        this.classA.doSomething();
    }
    //提供对外访问接口1
    public void doSomeThing(){
        this.classB.doSomething();
        this.classC.doSomething();
    }
}

//客户端
public class FacadeClient{
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.doAnyThing();
        System.out.println("--------------");
        facade.doSomeThing();
    }
}

通用代码的运行结果如下:

ClassC doSomething C...
ClassB doSomething B...
ClassA doSomething A...
--------------
ClassB doSomething B...
ClassC doSomething C...

外观模式的应用

外观模式的优点

  • 减少系统的相互依赖。外部访问不会直接深入到子系统,而是通过Facade类,使得外部系统和子系统直接松耦合。
  • 提高了灵活性。依赖少了,灵活性自然高了。
  • 提高安全性。Facade决定了外部系统只能访问到哪些子系统的业务逻辑,其他的一概无法访问。

外观模式的缺点

不符合开闭原则,当外部系统有新业务需求时,需要更改Facede。

外观模式的使用场景

  • 为一个复杂的模块或子系统提供一个外界访问的接口。
  • 子系统相对独立——外部对子系统的访问只要黑箱操作即可。
  • 限定访问范围。

《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记。

相关文章

  • 设计模式之 外观模式

    概述 UML类图 代码栗子 总结 概述概念 外观模式又叫做门面模式,提供一个更方便,高层接口,使用一致性的界面使得...

  • Android设计模式——外观模式(七大结构型)

    1.外观模式介绍 外观模式(Facade Pattern),是七大结构型设计模式之一。 外观模式运...

  • 设计模式[9]-外观模式-Facade Pattern

    1. 外观模式 外观模式(Facade Pattern),又称为门面模式,是非常常用的结构性设计模式。外观模式使得...

  • java设计模式-外观模式(Facade)

    外观模式,属于结构性模式。属于设计模式里面比较简单的设计模式,本人认为是最简单的设计模式。 所谓外观,就是我们能看...

  • 了解外观模式

    java 设计模式 ------外观模式 Java中一共有23种设计模式,每种设计模式各有特...

  • 设计模式之-4.外观模式

    每看一次设计模式,感觉每一个设计模式看起来是那么简单,对于外观模式我的理解就是外观模式:外观模式,这个名字起得不怎...

  • 设计模式详解——外观模式

    本篇文章介绍一种设计模式——外观模式。本篇文章内容参考《JAVA与模式》之门面模式,外观模式,深入浅出外观模式(二...

  • Java设计模式之——外观模式

    前言 在简述外观模式前,先看个生活中的例子: 程序员小明到了结婚的年龄,但是由于程序员对于泡妹子这件事来说,咳咳,...

  • 设计模式之七——外观模式

    原文传送门 1 介绍 外观模式又称为门面模式,它是一种对象结构型模式。外观模式是迪米特法则的一种具体实现,通过引入...

  • 外观模式(Facede)

    本文参考自: 《JAVA设计模式》之外观模式(Facade) 1. 作用 外观模式也叫门面模式,门面模式是对象的结...

网友评论

      本文标题:设计模式之外观模式

      本文链接:https://www.haomeiwen.com/subject/nqhafxtx.html