外观模式
一、定义
为子系统中的一组接口提供一个统一的接口。外观模式定义了一个高层次的接口,让子系统更加容易使用。
二、类图表示

三、实现
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();
	}
}
- 程序输出:

五、适用场合
- 当需要为一个复杂的子系统提供一个简单的接口时
- 当客户端程序与子系统接口(或抽象类)的实现之间存在很大的依赖性时,使用外观模式可以将客户端与这个子系统以及其他的子系统分离,从而提高子系统的独立性和可移植性
- 当子系统之间是相互依赖的,可以使用外观模式定义子系统间的通信接口,从而简化它们之间的依赖关系