外觀設計模式
- 🚩什么是外觀設計模式?
- 🚩外觀設計模式的特點
- 🚩外觀設計模式的結構
- 🚩外觀設計模式的優缺點
- 🚩外觀設計模式的Java實現
- 🚩代碼總結
- 🚩總結
🚩什么是外觀設計模式?
外觀設計模式(Facade Pattern) 是一種 結構型設計模式,它提供了一個 統一的接口,用于訪問子系統中的一組接口。外觀模式通過定義一個 高層接口,簡化了客戶端與子系統之間的交互,隱藏了子系統的復雜性。
使用場景
-
當需要為 復雜的子系統 提供一個 簡單的接口 時。
-
當需要 解耦客戶端與子系統 時,使子系統更容易維護和擴展。
-
當需要 分層構建系統 時,外觀模式可以作為每層的入口點。
🚩外觀設計模式的特點
-
簡化接口:外觀模式提供了一個簡化的接口,隱藏了子系統的復雜性。
-
解耦:客戶端與子系統之間通過外觀接口交互,降低了耦合度。
-
易用性:客戶端無需了解子系統的內部細節,只需調用外觀接口即可。
-
靈活性:子系統可以獨立變化,只要外觀接口保持不變,客戶端代碼無需修改。
🚩外觀設計模式的結構
外觀模式主要包含以下部分:
-
Facade(外觀):提供一個統一的接口,客戶端通過該接口與子系統交互。
-
SubSystem(子系統):由多個類或模塊組成,實現具體的功能。
-
Client(客戶端):通過
Facade
接口與子系統交互,無需直接調用子系統的類。
圖例:
🚩外觀設計模式的優缺點
? 優點
-
簡化接口:外觀模式提供了一個簡化的接口,隱藏了子系統的復雜性。
-
解耦:客戶端與子系統之間通過外觀接口交互,降低了耦合度。
-
易用性:客戶端無需了解子系統的內部細節,只需調用外觀接口即可。
-
靈活性:子系統可以獨立變化,只要外觀接口保持不變,客戶端代碼無需修改。
? 缺點
-
不符合開閉原則:如果子系統需要新增功能,可能需要修改外觀接口。
-
過度依賴:客戶端可能過度依賴外觀接口,導致外觀接口變得臃腫。
🚩外觀設計模式的Java實現
代碼地址:GitHub
-
創建
子系統類 SubSystemOne、SubSystemTwo 和 SubSystemThree
,分別實現具體的功能。- 子系統1
SubSystemOne
/*** @author hanson.huang* @version V1.0* @ClassName SubSystemOne* @Description 子系統1* @date 2025/3/24 17:00**/ public class SubSystemOne {public void methodOne() {System.out.println("執行子系統一的功能");} }
- 子系統2
SubSystemTwo
/*** @author hanson.huang* @version V1.0* @ClassName SubSystemTwo* @Description 子系統2* @date 2025/3/24 17:03**/ public class SubSystemTwo {public void methodTwo() {System.out.println("執行子系統二的功能");} }
- 子系統3
SubSystemThree
/*** @author hanson.huang* @version V1.0* @ClassName SubSystemThree* @Description 子系統3* @date 2025/3/24 17:04**/ public class SubSystemThree {public void methodThree() {System.out.println("執行子系統三的功能");} }
- 子系統1
-
創建
外觀類 Facade
,提供一個統一的接口,封裝子系統的調用。
/*** @author hanson.huang* @version V1.0* @ClassName Facade* @Description 外觀類* @date 2025/3/24 17:04**/
public class Facade {SubSystemOne subSystemOne;SubSystemTwo subSystemTwo;SubSystemThree subSystemThree;public Facade() {subSystemOne = new SubSystemOne();subSystemTwo = new SubSystemTwo();subSystemThree = new SubSystemThree();}public void methodA() {subSystemOne.methodOne();}public void methodB() {subSystemTwo.methodTwo();}public void methodC() {subSystemThree.methodThree();}
}
- 測試外觀模式
/*** @author hanson.huang* @version V1.0* @ClassName FacadePattern* @Description 測試外觀模式* @date 2025/3/24 17:08**/
public class FacadePattern {public static void main(String[] args) {Facade facade = new Facade();facade.methodA();facade.methodB();facade.methodC();}
}
📌 運行結果
🚩代碼總結
-
子系統類 SubSystemOne、SubSystemTwo 和 SubSystemThree 分別實現具體的功能。
-
外觀類 Facade 提供一個統一的接口,封裝子系統的調用。
-
客戶端 通過 外觀類 與子系統交互,無需直接調用子系統的類。
🚩總結
-
外觀設計模式(Facade Pattern) 提供了一個 統一的接口,用于訪問子系統中的一組接口,簡化了客戶端與子系統之間的交互。
-
適用于 為復雜子系統提供簡單接口、解耦客戶端與子系統 或 分層構建系統 的場景。
-
Java 實現 需要 定義子系統類 和 外觀類,并通過外觀類封裝子系統的調用。
? 適用場景:
-
需要為 復雜的子系統 提供一個 簡單的接口 時。
-
需要 解耦客戶端與子系統 時。
-
需要 分層構建系統 時。
-
Java中許多地方用到了外觀模式,在Java的GUI編程中,
javax.swing
包大量運用了外觀模式。例如,創建一個簡單的窗口,你可以借助JFrame
這個外觀類,而不用直接去操作底層復雜的窗口創建和管理機制。
創作不易,不妨點贊、收藏、關注支持一下,各位的支持就是我創作的最大動力??