外观模式
一、定义
为子系统中的一组接口提供一个统一的接口。外观模式定义了一个高层次的接口,让子系统更加容易使用。
二、类图表示
三、实现
1、SubSustem Interfaces
package pattern.structual.facade;
public interface InterfaceA {
public void methodAlpha();
}
package pattern.structual.facade;
public interface InterfaceB {
public void methodBravo();
}
package pattern.structual.facade;
public interface InterfaceC {
public void methodCharlie();
}
2、SubSystem Interface Implementor
package pattern.structual.facade;
public class ImplementorA implements InterfaceA {
@Override
public void methodAlpha() {
System.out.println("SubSystem InterfaceA method...");
}
}
package pattern.structual.facade;
public class ImplementorB implements InterfaceB {
@Override
public void methodBravo() {
System.out.println("SubSystem InterfaceB method...");
}
}
package pattern.structual.facade;
public class ImplementorC implements InterfaceC {
@Override
public void methodCharlie() {
System.out.println("SubSystem InterfaceC method...");
}
}
3、Facade
package pattern.structual.facade;
public class Facade {
private InterfaceA alpha;
private InterfaceB bravo;
private InterfaceC charlie;
public Facade(){
alpha = new ImplementorA();
bravo = new ImplementorB();
charlie = new ImplementorC();
}
public void methodOne(){
System.out.println("Facade MethodOne:");
alpha.methodAlpha();
bravo.methodBravo();
charlie.methodCharlie();
}
public void methodTwo(){
System.out.println("Facade MethodTwo:");
alpha.methodAlpha();
charlie.methodCharlie();
}
}
四、使用
package pattern.structual.facade;
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.methodOne();
System.out.println();
facade.methodTwo();
}
}
- 程序输出:
五、适用场合
- 当需要为一个复杂的子系统提供一个简单的接口时
- 当客户端程序与子系统接口(或抽象类)的实现之间存在很大的依赖性时,使用外观模式可以将客户端与这个子系统以及其他的子系统分离,从而提高子系统的独立性和可移植性
- 当子系统之间是相互依赖的,可以使用外观模式定义子系统间的通信接口,从而简化它们之间的依赖关系