外观模式
定义:他为子系统中的一组接口提供一个统一的高层接口,这使得子系统更加容易使用。
外观模式是"迪米特法则"的典型应用。只要是高层模块需要调度多个子系统时,我们都自觉地编写一个新的类封装,提供出精简的接口。
Facade类封装了子系统,可以提供出多个接口,简化客户角色的调用。
代码示例:
package com.facade;
public interface Facade {
/* 下面随便组装几个功能 */
void function12();
void function23();
void function123();
}
package com.facade;
public class FacadeImpl implements Facade{
private Sub1 sub1;
private Sub2 sub2;
private Sub3 sub3;
public FacadeImpl() {
super();
this.sub1 = new Sub1Impl();
this.sub2 = new Sub2Impl();
this.sub3 = new Sub3Impl();
}
public FacadeImpl(Sub1 sub1, Sub2 sub2, Sub3 sub3) {
super();
this.sub1 = sub1;
this.sub2 = sub2;
this.sub3 = sub3;
}
public void function12() {
sub1.function1();
sub2.function2();
}
public void function23() {
sub2.function2();
sub3.function3();
}
public void function123() {
sub1.function1();
sub2.function2();
sub3.function3();
}
}
Sub1,Sub2,Sub3本来3个接口各自为战,现在有了FacadeImpl类来统一指挥,外观接口则是提供给客户端使用的,比如客户如果需要调sub1,sub2,就直接调FacadeImpl类的function12()方法,而让客户端只依赖于外观接口。