外观模式(
Facade Pattern
):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。
外观模式包含如下角色:
Facade
: 外观角色SubSystem
: 子系统角色首先,是各个子系统角色类,分别如下:
/**
* 子系统类A.
*
* Created by blinkfox on 16/8/25.
*/
public class ClassA {
public void doSomethingA() {
System.out.println("----业务方法A...");
}
}
/**
* 子系统类B.
*
* Created by blinkfox on 16/8/25.
*/
public class ClassB {
public void doSomethingB() {
System.out.println("----业务方法B...");
}
}
/**
* 子系统类C.
*
* Created by blinkfox on 16/8/25.
*/
public class ClassC {
public void doSomethingC() {
System.out.println("----业务方法C...");
}
}
以下是外观模式的外观类:
/**
* 外观门面类.
*
* Created by blinkfox on 16/8/25.
*/
public class Facade {
private ClassA a = new ClassA();
private ClassB b = new ClassB();
private ClassC c = new ClassC();
// 以下是提供给外部访问的方法.
public void methodA() {
this.a.doSomethingA();
}
public void methodB() {
this.b.doSomethingB();
}
public void methodC() {
this.c.doSomethingC();
}
}
根据“单一职责原则”,在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统的访问提供了一个简单而单一的入口。 外观模式也是“迪米特法则”的体现,通过引入一个新的外观类可以降低原有系统的复杂度,同时降低客户类与子系统类的耦合度。
外观模式的优点k:
外观模式的缺点:
在以下情况下可以使用外观模式: