1.概述
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
1.1使用场景
1.在设计初期阶段,我们应该要有意识的把不同的两个层分离,例如:三层架构,数据访问层、业务逻辑层、表现层;如果我们不在层与层之间建立外观(Facede),那么层与层之间相互调用就会比较繁琐,耦合性也很高。因此建立外观就显得很有必要。
2.在开阶段、子系统往往会因为不断的重构演化而变得越来越复杂,增加外观可以提供一个简单的接口,减少他们之间的依赖。
3.在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了。可以这个遗留系统包含了一些个核心技术,新的系统需要依赖于老的系统,这个时候我们用外观模式也是很适合的,我们可以为新系统开发一个外观类(Facade),来提供设计粗糙或者高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade交互,Facade与遗留代码交互所有复杂的工作。
2.UML
3.代码
SubSystemOne.java
public class SubSystemOne {
public void methodOne(){
System.out.println("子系统方法一");
}
}
SubSystemTwo.java
public class SubSystemTwo {
public void methodTwo(){
System.out.println("子系统方法二");
}
}
SubSystemThree.java
public class SubSystemThree {
public void methodThree(){
System.out.println("子系统方法三");
}
}
Facade.java(外观类)
public class Facade {
private SubSystemOne one;
private SubSystemTwo two;
private SubSystemThree three;
public Facade(){
this.one = new SubSystemOne();
this.two = new SubSystemTwo();
this.three = new SubSystemThree();
}
public void methodA(){
one.methodOne();
two.methodTwo();
}
public void methodB(){
three.methodThree();
one.methodOne();
}
}
Client.java(客户端)
public class Client {
public static void main(String args[]){
Facade facade = new Facade();
facade.methodA();
facade.methodB();
}
}