Facade模式優點:
- 屏蔽了外部客戶端和系統內部模塊的交互
- Facade的功能可以被多個客戶端調用,可以實現複用(功能的共享)
- 對使用Facade的人員來說,Facade大大的節省了他們的學習成本
Facade模式缺點: 不符合開閉原則
本質:封裝交互、簡化調用
如果一個系統有好幾個子系統的話,每一個子系統有一個外觀類,整個系統可以有數個外觀類。
在層次化結構中,可以使用Facade模式定義系統中每一層的入口點。如果子系統之間是相互依賴的,則可以讓他們僅通過Facade進行通信,從而簡化他們之間的依賴關係。
4個子系統:
public class System1 {
public void method1() {
System.out.println("子系統方法 1");
}
}
public class System2 {
public void method2() {
System.out.println("子系統方法 2");
}
}
public class System3 {
public void method3() {
System.out.println("子系統方法 3");
}
}
public class System4 {
public void method4() {
System.out.println("子系統方法 4");
}
}
外觀類:
public class Facade {
private System1 system1;
private System2 system2;
private System3 system3;
private System4 system4;
public Facade() {}
public Facade(System1 system1, System2 system2, System3 system3, System4 system4) {
super();
this.system1 = system1;
this.system2 = system2;
this.system3 = system3;
this.system4 = system4;
}
public void methodA() {
system1.method1();
system2.method2();
}
public void methodB() {
system3.method3();
system4.method4();
}
}
客戶端:
public class Main {
public static void main(String[] args) {
Facade facade=new Facade();
facade.methodA();
facade.methodB();
}
}