設計模式之門面模式(外觀模式)
阿新 • • 發佈:2018-12-12
門面模式
- 概念
- 何時使用
- 類圖
- 程式碼例項
概念
當類A和多個類互動時,並且呼叫其方法很亂時,為了降低類之間的耦合性,符合迪米特最少知識法則,專門抽出一個類,並且提供出幾個簡單明瞭的介面給A類,那麼具體的複雜方法呼叫交給此類進行管理,該類就是為門面類。
何時使用
在開發的時候,我們採用分層思想,控制層、邏輯層、持久層。每層之間使用門面類進行互動。 還有就是在開發過程中,使用各種設計模式導致有很多很小的類,這個時候為了降低類的耦合度,專門提供Facade提供一個簡單介面。
當我們接觸到很複雜的老系統,我們又不想去重構,但是有些功能現在必須要使用的,使用門面模式也很合適。提供一個簡單的介面給新系統使用,讓這個Facade和老系統互動所有複雜工作。
類圖
程式碼例項
Facade 門面類
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description 門面類
**/
public class Facade {
private SubSystem1 subSystem1;
private SubSystem2 subSystem2;
private SubSystem3 subSystem3;
private SubSystem4 subSystem4;
private SubSystem5 subSystem5;
private SubSystem6 subSystem6;
public Facade(){
subSystem1 = new SubSystem1();
subSystem2 = new SubSystem2();
subSystem3 = new SubSystem3();
subSystem4 = new SubSystem4();
subSystem5 = new SubSystem5();
subSystem6 = new SubSystem6();
}
public void methodA(){
subSystem1.m1();
subSystem3.m3();
subSystem5.m5();
}
public void methodB(){
subSystem2.m2();
subSystem4.m4();
subSystem6.m6();
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem1 {
public void m1(){
System.out.println("SubSystem1 m1");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem2 {
public void m2(){
System.out.println("SubSystem2 m2");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem3 {
public void m3(){
System.out.println("SubSystem3 m3");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem4 {
public void m4(){
System.out.println("SubSystem4 m4");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem5 {
public void m5(){
System.out.println("SubSystem5 m5");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem6 {
public void m6(){
System.out.println("SubSystem6 m6");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.methodA();
facade.methodB();
}
}
輸出結果
SubSystem1 m1
SubSystem3 m3
SubSystem5 m5
SubSystem2 m2
SubSystem4 m4
SubSystem6 m6