Java設計模式之外觀模式的實現(xiàn)方式
什么是外觀模式?
外觀模式(Facade Pattern)隱藏系統(tǒng)的復雜性,并向客戶端提供了一個客戶端可以訪問系統(tǒng)的接口。這種類型的設計模式屬于結構型模式,它向現(xiàn)有的系統(tǒng)添加一個接口,來隱藏系統(tǒng)的復雜性。 這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現(xiàn)有系統(tǒng)類方法的委托調用。
實例說明
現(xiàn)在有一個回家打開燈,打開空調,使用電腦的場景??梢允褂猛庥^模式設計,燈、空調和電腦都是子系統(tǒng)
三個子系統(tǒng)類
public class Computer {
public void on(){
System.out.println("打開電腦");
}
public void off(){
System.out.println("關閉電腦");
}
}
public class Light {
public void on(){
System.out.println("打開燈");
}
public void off(){
System.out.println("關閉燈");
}
}
public class AirConditioning {
public void on(){
System.out.println("打開空調");
}
public void off(){
System.out.println("關閉空調");
}
}
如果不適用外觀模式
客戶端類
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)關閉
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)內部的實現(xiàn)
客戶端類
public class Client {
public static void main(String[] args) {
RoomFacade facade = new RoomFacade();
facade.on();
facade.off();
}
}
可見客戶端想使用子系統(tǒng)十分簡單
使用場景
- 為復雜的模塊或子系統(tǒng)提供外界訪問的模塊。
- 子系統(tǒng)相對獨立。
- 預防低水平人員帶來的風險。
外觀模式的優(yōu)缺點
優(yōu)點
- 客戶端不與系統(tǒng)耦合。雖然外觀類和系統(tǒng)耦合,但是客戶端不與系統(tǒng)耦合,如果增加子系統(tǒng),并不需要修改客戶端,只需要修改外觀類。
- 簡單易用??蛻舳瞬恍枰私庾酉到y(tǒng)內部實現(xiàn),只需要和外觀類交互即可,調用起來非常簡單。
缺點
- 如果設計不當,增加新的子系統(tǒng)可能需要修改外觀類源代碼,違反開閉原則。
到此這篇關于Java設計模式之外觀模式的實現(xiàn)方式的文章就介紹到這了,更多相關Java外觀模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java多線程案例實戰(zhàn)之定時器的實現(xiàn)
在Java中可以使用多線程和定時器來實現(xiàn)定時任務,下面這篇文章主要給大家介紹了關于Java多線程案例之定時器實現(xiàn)的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-01-01
淺析如何利用Spring AI構建一個簡單的問答系統(tǒng)
sentinel?整合spring?cloud限流的過程解析
Java實現(xiàn)將圖片上傳到webapp路徑下 路徑獲取方式
SpringBoot后端接收數(shù)組對象的實現(xiàn)
基于SpringBoot+FFmpeg+ZLMediaKit實現(xiàn)本地視頻推流

