Java設(shè)計模式中的外觀模式詳解
一 定義
外觀(Facade)模式又叫作門面模式,是一種通過為多個復雜的子系統(tǒng)提供一個一致的接口,而使這些子系統(tǒng)更加容易被訪問的模式。該模式對外有一個統(tǒng)一接口,外部應(yīng)用程序不用關(guān)心內(nèi)部子系統(tǒng)的具體細節(jié),這樣會大大降低應(yīng)用程序的復雜度,提高了程序的可維護性。
二 UML類圖
外觀模式是為了解決類與類之家的依賴關(guān)系的,像spring一樣,可以將類和類之間的關(guān)系配置到配置文件中,而外觀模式就是將他們的關(guān)系放在一個Facade類中,降低了類類之間的耦合度,該模式中沒有涉及到接口,看下類圖:(我們以一個計算機的啟動過程為例)
- 外觀類(Facade):為調(diào)用端提供統(tǒng)一的調(diào)用接口,外觀類知道哪些子系統(tǒng)負責處理請求,從而將調(diào)用端的請求代理給適當子系統(tǒng)對象
- 調(diào)用者(Client):外觀接口的調(diào)用者
- 子系統(tǒng)的集合:指模塊或者子系統(tǒng),處理Facade 對象指派的任務(wù),他是功能的實際提供者
三 代碼實例
外觀模式可以理解為轉(zhuǎn)換一群接口,客戶只要調(diào)用一個接口,而不用調(diào)用多個接口才能達到目的。比如:在 po
上安裝軟件的時候經(jīng)常有一鍵安裝選項(省去選擇安裝目錄、安裝的組件等等),還有就是手機的重啟功能(把關(guān)機和啟動合為一個操作)。
外觀模式就是解決多個復雜接口帶來的使用困難,起到簡化用戶操作的作用
示意圖說明
外觀(Facade)角色:為多個子系統(tǒng)對外提供一個共同的接口。
子系統(tǒng)(Sub System)角色:實現(xiàn)系統(tǒng)的部分功能,客戶可以通過外觀角色訪問它。
客戶(Client)角色:通過一個外觀角色訪問各個子系統(tǒng)的功能。
模式的實現(xiàn)
public class CPU { public void startup(){ System.out.println("cpu startup!"); } public void shutdown(){ System.out.println("cpu shutdown!"); } } public class Memory { public void startup(){ System.out.println("memory startup!"); } public void shutdown(){ System.out.println("memory shutdown!"); } } public class Disk { public void startup(){ System.out.println("disk startup!"); } public void shutdown(){ System.out.println("disk shutdown!"); } } public class Computer { private CPU cpu; private Memory memory; private Disk disk; public Computer(){ cpu = new CPU(); memory = new Memory(); disk = new Disk(); } public void startup(){ System.out.println("start the computer!"); cpu.startup(); memory.startup(); disk.startup(); System.out.println("start computer finished!"); } public void shutdown(){ System.out.println("begin to close the computer!"); cpu.shutdown(); memory.shutdown(); disk.shutdown(); System.out.println("computer closed!"); } } //測試 public class User { public static void main(String[] args) { Computer computer = new Computer(); computer.startup(); computer.shutdown(); } }
輸出結(jié)果如下:
start the computer!
cpu startup!
memory startup!
disk startup!
start computer finished!
begin to close the computer!
cpu shutdown!
memory shutdown!
disk shutdown!
computer closed!
如果我們沒有Computer類,那么,CPU、Memory、Disk他們之間將會相互持有實例,產(chǎn)生關(guān)系,這樣會造成嚴重的依賴,修改一個類,可能會帶來其他類的修改,這不是我們想要看到的,有了Computer類,他們之間的關(guān)系被放在了Computer類里,這樣就起到了解耦的作用,這,就是外觀模式!
四 外觀模式的優(yōu)缺點
外觀模式的特點:
外觀(Facade)模式是“迪米特法則”的典型應(yīng)用,它有以下主要優(yōu)點:
- 降低了子系統(tǒng)與客戶端之間的耦合度,使得子系統(tǒng)的變化不會影響調(diào)用它的客戶類。
- 對客戶屏蔽了子系統(tǒng)組件,減少了客戶處理的對象數(shù)目,并使得子系統(tǒng)使用起來更加容易。
- 降低了大型軟件系統(tǒng)中的編譯依賴性,簡化了系統(tǒng)在不同平臺之間的移植過程,因為編譯一個子系統(tǒng)不會影響其他的子系統(tǒng),也不會影響外觀對象。
外觀(Facade)模式的主要缺點如下:
- 不能很好地限制客戶使用子系統(tǒng)類,很容易帶來未知風險。
- 增加新的子系統(tǒng)可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。
五 外觀模式的使用場景
通常在以下情況下可以考慮使用外觀模式。
- 對分層結(jié)構(gòu)系統(tǒng)構(gòu)建時,使用外觀模式定義子系統(tǒng)中每層的入口點可以簡化子系統(tǒng)之間的依賴關(guān)系。
- 當一個復雜系統(tǒng)的子系統(tǒng)很多時,外觀模式可以為系統(tǒng)設(shè)計一個簡單的接口供外界訪問。
- 當客戶端與多個子系統(tǒng)之間存在很大的聯(lián)系時,引入外觀模式可將它們分離,從而提高子系統(tǒng)的獨立性和可移植性。
到此這篇關(guān)于Java設(shè)計模式中的外觀模式詳解的文章就介紹到這了,更多相關(guān)Java外觀模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?-jar參數(shù)詳解之掌握Java可執(zhí)行JAR文件的運行技巧
做項目的時候我們肯定接觸過很多jar包,下面這篇文章主要給大家介紹了關(guān)于Java?-jar參數(shù)詳解之掌握Java可執(zhí)行JAR文件的運行技巧,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-11-11