結構性設計模式之Facade(外觀)設計模式
前言:
外觀模式:用自己的話理解就是用戶看到是一個總體頁面,比如xx報名系統頁面。里面有歷年真題模塊、報名模塊、教程模塊、首頁模塊… 做了一個各個模塊的合并,對用戶操作起來比較簡單,用戶不必知道里面有什么系統。
摘要:
Facade(外觀)模式是一種結構性設計模式,它通過提供一個統一的高層接口來簡化復雜子系統的使用。該模式的意圖是為子系統中的一組接口提供一致的界面,使其更容易被調用。
主要特點包括:
Facade類了解子系統的內部結構,將客戶端請求代理給適當的子系統對象
子系統類實現具體功能,但不知道Facade的存在
適用于需要簡化復雜系統接口、降低系統耦合度或構建層次化子系統的情況
示例代碼展示了如何通過Facade類統一調用多個子系統的功能方法(methodOne、methodTwo等)。這種模式特別適合需要隱藏系統復雜性或提高系統可維護性的場景。
1)意圖
為子系統中一組接口提供一個一致的界面,Facade 模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
2)結構
其中:
- Facade 知道哪些子系統類負責處理請求;將客戶的請求代理給適當的子系統對象。
- Subsystem classes 實現子系統的功能;處理有Facade對象指派的任務;沒有Facade的任何相關信息,既沒有指向Facade的指針。
3)適用于
Facade 模式適用于:
- 要為一個復雜系統提供一個簡單接口時。
- 客戶程序與抽象類的實現部分之間存在很大的依賴性。
- 當需要構建一個層次結構的子系統時,使用Facade模式定義子系統中每層的入口點。
/*** @author psd 結構性設計模式之【Facade】外觀模式*/
public class FacadeDemo {public static void main(String[] args) {Facade facade = new Facade();facade.methodOne();facade.methodTwo();facade.methodThree();}
}class Facade{private final FadeThree fadeThree;private final FacadeTwo fadeTwo;private final FacadeOne fadeOne;public Facade() {fadeThree = new FadeThree();fadeTwo = new FacadeTwo();fadeOne = new FacadeOne();}public void methodOne(){fadeOne.methodOne();}public void methodTwo(){fadeTwo.methodTwo();}public void methodThree(){fadeThree.methodThree();}
}class FadeThree{public void methodThree(){System.out.println("執行子任務第三個功能....");}
}class FacadeTwo{public void methodTwo(){System.out.println("執行子任務第二個功能....");}
}
class FacadeOne{public void methodOne(){System.out.println("執行子任務第一個功能....");}
}
要為一個復雜子系統提供一個簡單接口時,子系統往往因為不斷演化而變得越來越復雜。大多數模式使用時都會產生更多更小的類,這使得子系統更具有可重用性,也更容易對子系統進行定制,但也給那些不需要定制子系統的用戶帶來一些使用上的困難。Facade 可以提供一個簡單的默認視圖,這一視圖對大多數用戶來說已經足夠,而那些需要更多的可定制性的用戶可以越過 Facade 層
客戶程序與抽象類的實現部分之間存在著很大的依賴性。引入Facade將這個子系統與客戶以及其他的子系統分離,可以提高子系統的獨立性和可移植性。
**當需要構建一個層次結構的子系統時,使用Facade 模式定義子系統中每層的入口點。**如果子系統之間是相互依賴的,則可以讓它們僅通過 Facade 進行通信,從而簡化了它們之間的依賴關系。
喜歡我的文章記得點個在看,或者點贊,持續更新中ing…