三分鐘學會門面模式!
前言
只有光頭才能變強
無論是面試還是個人的提升,設計模式是必學的。今天來講解門面(外觀)模式~
上一次分享了一篇好文:《為什麼阿里巴巴禁止工程師直接使用日誌系統(Log4j、Logback)中的 API》
【強制】應用中不可直接使用日誌系統(Log4j、Logback)中的 API,而應依賴使用日誌框架SLF4J 中的 API,使用門面模式的日誌框架,有利於維護和各個類的日誌處理方式統一。
不知道大家有沒有了解過門面模式,我去翻了一下《設計模式之禪》,發現非常簡單,所以在這給大家分享一下。
一、門面(外觀)模式介紹
1.1門面模式現例項子
一個電源總開關可以控制所有電器的開啟或關閉狀態。
無論是空調、冰箱、電視、電腦、風扇等等,只要是電器都受這個電閘控制。只要這個電閘將關閉,所有的電器都會受到牽連(一同關閉)。
電源總開關(電閘)即為該系統的外觀模式設計。
1.2回到程式碼世界
比如,我們家裡現在有空調、冰箱、電腦這麼幾個電器
// 冰箱
public class Fridge {
// 關閉冰箱
public void turnOff() {
}
// 開冰箱燈..減低冰箱溫度..調高冰箱溫度...
}
// 電視
public class Television {
// 關閉電視
public void turnOffTV() {
System.out.println("關閉電視");
}
// 切換電視節目..減低電視聲音..調高電視聲音...
public void doSomething() {
System.out.println("切換電視節目..減低電視聲音..調高電視聲音...");
}
}
// 電腦
public class Computer {
// 關閉電腦
public void turnOffComputer() {
System.out.println("關閉電腦");
}
// 使用電腦幹別的事~
public void doSomething() {
System.out.println("使用電腦幹別的事~");
}
}
如果沒有電閘的的情況下,我想將上面的電器關閉掉,我需要這樣幹:
// 我要關閉電視、電腦、空調
public static void main(String[] args) {
new Computer().turnOffComputer();
new Fridge().turnOffFridge();
new Television().turnOffTV();
// 當然了,一個正常的家庭不單單隻有這麼點電器的。
// 如果某一天我想關閉家裡所有的電器,就需要重複new 個物件,呼叫其turn offer方法
}
一個一個關是不是很麻煩,所以我們就有了電閘:
// 電閘
public class ElectricBrake {
private Computer computer = new Computer();
private Fridge fridge = new Fridge();
private Television television = new Television();
// 關閉所有電器
public void turnOffAll() {
computer.turnOffComputer();
fridge.turnOffFridge();
television.turnOffTV();
}
}
當我們想關閉所有電器的時候,我們可以使用電閘來關閉。
// 我要關閉所有電器 public static void main(String[] args) { ElectricBrake brake = new ElectricBrake(); brake.turnOffAll(); }
有經驗的同學可能就會想,這不就再封裝了一層嗎??這就是門面模式啦??嗯,沒錯,這就是門面模式
1.3門面模式介紹
《設計模式之禪》:
要求一個子系統的外部與其內部的通訊必須透過一個統一的物件進行。門面模式提供一個高層次的介面,使得子系統更易於使用。
門面模式的通用類圖十分簡單:
按照我們的例子,子系統就相當於電腦、冰箱、電視。統一的物件就相當於我們的電閘。我們透過電閘來對所有電器進行關閉(使得不用逐個逐個找電腦、冰箱、電視來關閉)
使用了門面模式,使客戶端呼叫變得更加簡單!
1.4門面模式的優缺點
優點:
減少系統的相互依賴。使用門面模式,所有的依賴都是對門面物件的依賴,與子系統無關
提高了靈活性。不管子系統內部如何變化,只要不影響門面物件,任你自由活動。
缺點:
不符合開閉原則,對修改關閉,對擴充套件開放。比如我們上面的例子,如果有新電器要想要加入一次關閉的隊伍中,只能在門面物件上修改
turnOffAll()
方法的程式碼。
最後
是不是覺得門面設計模式就那麼一回事了?說白了就是對子系統封裝了一層,給予了一個高層次的介面(門面物件),進而方便客戶端呼叫。
推薦閱讀和參考資料:
《設計模式之禪》
https://blog.csdn.net/hguisu/article/details/7533759
https://www.cnblogs.com/lthIU/p/5860607.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900354/viewspace-2286821/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 三分鐘學會《門面模式》模式
- 設計模式之模板方法模式(三分鐘學會一個設計模式)設計模式
- 設計模式之狀態模式(三分鐘學會一個設計模式)設計模式
- 三分鐘爬蟲入門爬蟲
- Cython三分鐘入門
- 三分鐘帶你快速入門極簡色彩學
- 三分鐘幫你快速入門極簡色彩學
- 三分鐘學會go語言的變數定義Go變數
- 我學設計模式 之 門面模式設計模式
- 三分鐘學會如何在函式計算中使用puppeteer?函式
- 三分鐘學會如何在函式計算中使用puppeteer函式
- 三分鐘學會如何在函式計算中使用 puppeteer函式
- 一分鐘學會《模板方法模式》模式
- 門面模式模式
- 只要五分鐘,帶你學會策略模式模式
- numpy 基礎入門 - 30分鐘學會numpy
- 快速入門:十分鐘學會PythonPython
- 三分鐘讓你快速學會BI專案的評估與診斷
- 門面模式,介面卡模式模式
- 關於門面模式模式
- 三分鐘帶入門瞭解openstack的horizon專案
- iOS10降級到iOS9.3正式版影片教程(三分鐘學會)iOS
- 設計模式系列之「門面模式」設計模式
- 一分鐘學會、三分鐘上手、五分鐘應用,快速上手責任鏈框架詳解 | 京東雲技術團隊框架
- 三分鐘搞懂桶排序排序
- 設計模式之【門面模式(外觀模式)】設計模式
- 手把手教你呼叫微信掃一掃!三分鐘包會
- 多執行緒三分鐘就可以入個門了!執行緒
- 三分鐘帶你入門瞭解openstack的Nova專案
- 三分鐘帶你入門瞭解openstack的cinder專案
- 三分鐘帶你入門瞭解openstack的glance專案
- Java設計模式之(九)——門面模式Java設計模式
- 三分鐘帶你入門瞭解openstack的keystone專案
- 三分鐘搞懂CSS 權重CSS
- 遺失得 Laravel 設計模式-門面模式Laravel設計模式
- 5分鐘入門git模式開發Git模式
- 【入門教程】5分鐘教你快速學會整合Java springboot ~JavaSpring Boot
- 十分鐘學會FlaskFlask