Java設計模式 - 外觀模式
?? 不斷學習才是王道
?? 繼續踏上學習之路,學之分享筆記
?? 總有一天我也能像各位大佬一樣
??原創作品,更多關注我CSDN: 一個有夢有戲的人
??準備將博客園、CSDN一起記錄分享自己的學習心得!!!
??分享學習心得,歡迎指正,大家一起學習成長!

- Java設計模式 - 外觀模式
- 簡介
- 外觀模式之理解
- 實體
- ①、定義子系統
- ②、外觀類
- ③、測驗
- 好文推薦
簡介
外觀模式(Facade Pattern)隱藏系統的復雜性,并向客戶端提供了一個客戶端可以訪問系統的介面,這種型別的設計模式屬于結構型模式,它向現有的系統添加一個介面,來隱藏系統的復雜性,
這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現有系統類方法的委托呼叫,
———— 菜鳥聯盟
外觀模式之理解
對于外觀模式,我們可以理解為他是將一些復雜的介面或類進行隱藏,自己暴露出更為簡單的操作方法,使得以我們不需要去對復雜方法的操作,就比如要完成一道工序,工序又有許多步驟,在不同情況要使用不同工序的方法,如果是傳統的方式,一個一個呼叫,那么到一定量就會顯得呼叫的復雜并且維護起來困難,因此可以使用外觀模式,將一起使用的方法封裝在一起,這樣只需要呼叫這個外觀的方法即可完成,
我們看一下外觀模式的UML圖:

實體
采用智能家居的例子來理解外觀模式,例子很簡單,當我們按下一鍵啟動開關,就可以為我們打開/關閉窗戶、電視、空調、燈光等,
先看一些類圖:

具體代碼如下:
①、定義子系統
子系統分為:燈光、空調、電視、窗戶,采用單例模式,并且宣告開啟、關閉的方法,
這里只粘貼一個,其他的代碼類似,
package com.lyd.demo.subsystem;
/**
* @Author: lyd
* @Description: 子系統 - 空調
* @Date: 2022-08-31
*/
public class AirConditioner {
private static AirConditioner airConditioner = new AirConditioner();
public static AirConditioner getAirConditioner() {
return airConditioner;
}
public void on() {
System.out.println("智能家居為您打開[空調]");
}
public void off() {
System.out.println("智能家居為您關閉[空調]");
}
}
②、外觀類
采用單例模式,實體化物件,并且根據需要去呼叫方法,暴露出介面即可完成,這里是啟動所有設備,還可以根據需要去選擇,
package com.lyd.demo.faced;
import com.lyd.demo.subsystem.AirConditioner;
import com.lyd.demo.subsystem.Lights;
import com.lyd.demo.subsystem.Tv;
import com.lyd.demo.subsystem.Windows;
/**
* @Author: lyd
* @Description: 外觀模式
* @Date: 2022-08-31
*/
public class SmartHomeFaced {
private Lights[] lights = new Lights[4]; // 4盞燈
private Tv tv;
private AirConditioner airConditioner;
private Windows windows;
public SmartHomeFaced() {
this.lights[0] = Lights.getLights();
this.lights[1] = Lights.getLights();
this.lights[2] = Lights.getLights();
this.lights[3] = Lights.getLights();
this.tv = Tv.getTv();
this.airConditioner = AirConditioner.getAirConditioner();
this.windows = Windows.getWindows();
}
public void openAll() {
lights[0].on(0);
lights[1].on(1);
lights[2].on(2);
lights[3].on(3);
tv.on();
airConditioner.on();
windows.on();
}
public void offAll() {
lights[0].off(0);
lights[1].off(1);
lights[2].off(2);
lights[3].off(3);
tv.off();
airConditioner.off();
windows.off();
}
}
③、測驗
呼叫外觀暴露的介面方法就可以,
package com.lyd.demo.test;
import com.lyd.demo.faced.SmartHomeFaced;
/**
* @Author: lyd
* @Description: 測驗
* @Date: 2022-08-31
*/
public class FacedTest {
public static void main(String[] args) {
SmartHomeFaced smartHomeFaced = new SmartHomeFaced();
smartHomeFaced.openAll();
smartHomeFaced.offAll();
}
}
運行結果:

好文推薦
- 阿里云 - 開發者社區 https://developer.aliyun.com/article/420326
- 掘金 https://juejin.cn/post/6844903680303431693
今天的內容還算是簡單好理解的,多看看,多動手理解就會更快!
??創作不易,可能有些語言不是很通暢,如有錯誤請指正,感謝觀看!記得一鍵三連哦!??
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/508130.html
標籤:設計模式
上一篇:統一建模語言UML---類圖
下一篇:從系統架構分析安全問題及應對措施
