定义
提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
简单点说,就是将要每次都要执行的多个方法集合起来统一执行,暴露出一个统一接口即可。
实现
比如:要调用ClassA和ClassB的doSomething方法甚至更多的方法,只用调用Facade接口的facadeMethod方法即可。
public class Client {
public static void main(String[] args) {
ClassA ca = new ClassA();
ClassB cb = new ClassB();
Facade facade = new FacadeImpl(ca, cb);
facade.facadeMethod();
}
}
FacadeImpl实现如下:
public class FacadeImpl implements Facade {
private ClassA ca;
private ClassB cb;
public FacadeImpl(ClassA ca, ClassB cb) {
this.ca = ca;
this.cb = cb;
}
@Override
public void facadeMethod() {
ca.doSomething();
cb.doSomething();
}
}
点评
所谓的外观模式,其实稍有编程经验的人都知道,这根本谈不上模式,只能说是一种推荐的编程规范,于企业来说减少产品维护成本(多处调用只用统一改一个地方)。但是,理论上这种方式带来的副作用必然是性能的消耗,然而基本可以忽略。
讲这个模式更重要的是传达一个原则:最少知识原则。即我们封装接口的时候,接口越少越好,接口暴露出的内容越少越好。