Java設(shè)計模式之外觀模式的實現(xiàn)方式
什么是外觀模式?
外觀模式(Facade Pattern)隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供了一個客戶端可以訪問系統(tǒng)的接口。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它向現(xiàn)有的系統(tǒng)添加一個接口,來隱藏系統(tǒng)的復(fù)雜性。 這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現(xiàn)有系統(tǒng)類方法的委托調(diào)用。
實例說明
現(xiàn)在有一個回家打開燈,打開空調(diào),使用電腦的場景??梢允褂猛庥^模式設(shè)計,燈、空調(diào)和電腦都是子系統(tǒng)
三個子系統(tǒng)類
public class Computer { public void on(){ System.out.println("打開電腦"); } public void off(){ System.out.println("關(guān)閉電腦"); } }
public class Light { public void on(){ System.out.println("打開燈"); } public void off(){ System.out.println("關(guān)閉燈"); } }
public class AirConditioning { public void on(){ System.out.println("打開空調(diào)"); } public void off(){ System.out.println("關(guān)閉空調(diào)"); } }
如果不適用外觀模式
客戶端類
public class Client { public static void main(String[] args) { AirConditioning airConditioning = new AirConditioning(); Computer computer = new Computer(); Light light = new Light(); //所有子系統(tǒng)打開 light.on(); airConditioning.on(); computer.on(); //所有子系統(tǒng)關(guān)閉 computer.off(); airConditioning.off(); light.off(); } }
子系統(tǒng)和客戶端耦合,每當子系統(tǒng)有改變,都需要修改客戶端
當使用外觀模式
外觀類
public class RoomFacade { AirConditioning airConditioning; Light light; Computer computer; public RoomFacade(){ airConditioning = new AirConditioning(); light = new Light(); computer = new Computer(); } public void on(){ light.on(); airConditioning.on(); computer.on(); } public void off(){ computer.off(); airConditioning.off(); light.off(); } }
接下來客戶端只需要和外觀類交互即可,不用知道子系統(tǒng)內(nèi)部的實現(xiàn)
客戶端類
public class Client { public static void main(String[] args) { RoomFacade facade = new RoomFacade(); facade.on(); facade.off(); } }
可見客戶端想使用子系統(tǒng)十分簡單
使用場景
- 為復(fù)雜的模塊或子系統(tǒng)提供外界訪問的模塊。
- 子系統(tǒng)相對獨立。
- 預(yù)防低水平人員帶來的風(fēng)險。
外觀模式的優(yōu)缺點
優(yōu)點
- 客戶端不與系統(tǒng)耦合。雖然外觀類和系統(tǒng)耦合,但是客戶端不與系統(tǒng)耦合,如果增加子系統(tǒng),并不需要修改客戶端,只需要修改外觀類。
- 簡單易用。客戶端不需要了解子系統(tǒng)內(nèi)部實現(xiàn),只需要和外觀類交互即可,調(diào)用起來非常簡單。
缺點
- 如果設(shè)計不當,增加新的子系統(tǒng)可能需要修改外觀類源代碼,違反開閉原則。
到此這篇關(guān)于Java設(shè)計模式之外觀模式的實現(xiàn)方式的文章就介紹到這了,更多相關(guān)Java外觀模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用ffmpeg和mencoder實現(xiàn)視頻轉(zhuǎn)碼
這篇文章主要為大家詳細介紹了Java使用ffmpeg和mencoder實現(xiàn)視頻轉(zhuǎn)碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12簡單談?wù)刯ava中final,finally,finalize的區(qū)別
Java中final、finally、finalize的區(qū)別與用法,困擾了不少學(xué)習(xí)者,下面我們就這個問題進行一些探討,希望對大家的學(xué)習(xí)有所幫助。2016-05-05Java虛擬機JVM優(yōu)化實戰(zhàn)的過程全記錄
有人說Java之所以能夠崛起,JVM功不可沒。Java虛擬機最初服務(wù)于讓Java語言凌駕于平臺之上,實現(xiàn)“編寫一次,到處運行”,那么下面這篇文章主要給大家分享了個關(guān)于Java虛擬機JVM優(yōu)化實戰(zhàn)的過程全記錄,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08解決idea npm:無法將“npm”項識別為cmdlet、函數(shù)、腳本文件或可運行程序的名稱問題
在IDEA中運行npm命令時出現(xiàn)無法識別的錯誤,通常是由于npm環(huán)境變量配置不正確引起,解決方法包括以管理員身份運行IDEA,確認node和npm是否正確安裝及配置環(huán)境變量,需要在系統(tǒng)環(huán)境變量中添加node.js的安裝路徑,并設(shè)置npm的全局模塊和緩存路徑2024-10-10Java將RTF文檔轉(zhuǎn)換為Word/PDF/HTML/圖片
RTF文檔因其跨平臺兼容性而廣泛使用,但有時在不同的應(yīng)用場景可能需要特定的文檔格式,所以本文來講講如何通過Java將RTF轉(zhuǎn)換為Word/PDF/HTML和圖片格式2025-01-01