结构型模式之外观模式

外观模式(Facade Pattern)也叫门面模式,是一种比较常用也是非常简单的设计模式。

定义:

  • 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易使用。

外观模式具有以下两个角色。

  • 外观(Facade)角色:客户端可以调用该角色的方法,该角色知晓相关子系统的功能和责任。正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统,即该角色没有实际的业务逻辑,只是一个委托类。
  • 子系统(Subsystem)角色:可以同时有一个或多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合。子系统不知道外观角色的存在,对于子系统而言,外观角色仅仅是一个客户端而已。

类图如下所示。

由于子系统是一个类的集合,此处使用3个无关的类进行代表。

子系统类的集合

public class ClassA() {
    public void methodA() {
    }
}
public class ClassB() {
    public void methodB() {
    }
}
public class ClassC() {
    public void methodC() {
    }
}

Facade.java

public class Facade {
    // 被委托的对象
    private ClassA a = new ClassA();
    private ClassB b = new ClassB();
    private ClassC c = new ClassC();
    // 提供外界的方法
    public void methodA() {
        a.methodA();
    }
    public void methodB() {
        b.methodB();
    }
    public void methodC() {
        c.methodC();
    }
}

优点:

  • 减少系统的相互依赖,所有的对象都是对Facade对象的依赖,与子系统无关。
  • 提高灵活性,不管子系统内部如何变化,只要不影响Facade对象,任何活动都是自由的。
  • 提高安全性,Facade中未提供的方法,外界就无法访问,提高系统的安全性。

缺点:

  • 不符合开闭原则,对修改关闭,对扩展开放。

应用场景:

  • 为一个复杂的模块或子系统提供一个供外界访问的接口。
  • 子系统相对独立,外界对子系统的访问只要黑箱操作即可,
  • 预防风险扩散,使用Facade进行访问控制。

摘自:

青岛东合信息技术有限公司 . 设计模式(Java版) .  电子工业出版社,2012,98-100.

posted @ 2018-12-06 14:38  yewen1234  阅读(142)  评论(0编辑  收藏  举报