天天看點

【設計模式自習室】門面模式 Facade Pattern前言結構型——外觀模式/門面模式 Facade Pattern參考關注我

《設計模式自習室》系列,顧名思義,本系列文章帶你溫習常見的設計模式。主要内容有:

該模式的介紹,包括:

引子、意圖(大白話解釋)

類圖、時序圖(理論規範)

該模式的代碼示例:熟悉該模式的代碼長什麼樣子

該模式的優缺點:模式不是萬金油,不可以濫用模式

該模式的應用案例:了解它在哪些重要的源碼中被使用

【設計模式自習室】開篇:為什麼我們要用設計模式?

【設計模式自習室】建造者模式

【設計模式自習室】原型模式

【設計模式自習室】透徹了解單例模式

【設計模式自習室】了解工廠模式的三種形式

【設計模式自習室】擴充卡模式

【設計模式自習室】幕後英雄:裝飾模式

【設計模式自習室】橋接模式 Bridge Pattern:處理多元度變化

門面模式便是把一些複雜的流程封裝成一個接口供給外部使用者更簡單的使用。

比如使用者是用電腦,電腦有操作:開機關機重新開機等。每個操作裡都有複雜的邏輯,比如開始需要先啟動BIOS-引導硬碟—進入系統-初始化桌面等。對于使用者來說,隻需要調用開機的方法。

【設計模式自習室】門面模式 Facade Pattern前言結構型——外觀模式/門面模式 Facade Pattern參考關注我

門面模式( Facade Pattern) 也叫做外觀模式, 是一種比較常用的封裝模式,

Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.( 要求一個子系統的外部與其内部的通信必須通過一個統一的對象進行。門面模式提供一個高層次的接口, 使得子系統更易于使用。)

如果看不懂UML類圖,可以先粗略浏覽下該圖,想深入了解的話,可以繼續谷歌,深入學習:

【設計模式自習室】門面模式 Facade Pattern前言結構型——外觀模式/門面模式 Facade Pattern參考關注我

門面模式類圖:

【設計模式自習室】門面模式 Facade Pattern前言結構型——外觀模式/門面模式 Facade Pattern參考關注我

客戶角色(Client): 客戶通過調用Facede來完成要實作的功能。

門面角色(Facade):它被客戶角色調用,并且知道自己管理着的子系統。内部根據客戶角色的需求預定了幾種功能的組合。

子系統角色(SystemA/B/C):實作了子系統的功能。它對客戶角色是完全透明的。它内部可以有系統内的互相互動,也可以由供外界調用的接口。

時序圖(Sequence Diagram)是顯示對象之間互動的圖,這些對象是按時間順序排列的。時序圖中顯示的是參與互動的對象及其對象之間消息互動的順序。

我們可以大緻浏覽下時序圖,如果感興趣的小夥伴可以去深究一下:

【設計模式自習室】門面模式 Facade Pattern前言結構型——外觀模式/門面模式 Facade Pattern參考關注我

門面Facade:

用戶端調用Client:

對于使用者來說,使用Client完全不需要關心底層細節。

SLF4J 是簡單的日志外觀模式架構,抽象了各種日志架構例如 Logback、Log4j、Commons-logging 和 JDK 自帶的 logging 實作接口。它使得使用者可以在部署時使用自己想要的日志架構。

SLF4J 沒有替代任何日志架構,它僅僅是标準日志架構的外觀模式。如果在類路徑下除了 SLF4J 再沒有任何日志架構,那麼預設狀态是在控制台輸出日志。

【設計模式自習室】門面模式 Facade Pattern前言結構型——外觀模式/門面模式 Facade Pattern參考關注我

檢視 org.springframework.jdbc.support.JdbcUtils

檢視 org.apache.ibatis.session.Configuration 類中以 new 開頭的方法

org.apache.catalina.connector.Request 和 org.apache.catalina.connector.RequestFacade 這兩個類都實作了 HttpServletRequest 接口

松散耦合:使得用戶端和子系統之間解耦,讓子系統内部的子產品功能更容易擴充和維護;

簡單易用:用戶端根本不需要知道子系統内部的實作,或者根本不需要知道子系統内部的構成,它隻需要跟Facade類互動即可。

更好的劃分通路層次:有些方法是對系統外的,有些方法是系統内部互相互動的使用的。子系統把那些暴露給外部的功能集中到門面中,這樣就可以實作用戶端的使用,很好的隐藏了子系統内部的細節。

在不引入抽象外觀類的情況下,增加新的子系統可能需要修改外觀類或用戶端的源代碼,違背了“開閉原則”。

《HEAD FIRST設計模式》

https://www.cnblogs.com/lthIU/p/5860607.html

https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/facade.html

https://blog.csdn.net/wwwdc1012/article/details/82729516

我是一名後端開發工程師。

主要關注後端開發,資料安全,爬蟲,物聯網,邊緣計算等方向,歡迎交流。

微信公衆号:後端技術漫談

Github:@qqxx6661

CSDN:@後端技術漫談

知乎:@後端技術漫談

簡書:@後端技術漫談

掘金:@後端技術漫談

Java面試知識點複習全手冊

設計模式/資料結構 自習室

Leetcode/劍指offer 算法題解析

SpringBoot/SpringCloud菜鳥入門實戰系列

爬蟲相關技術文章

後端開發相關技術文章

逸聞趣事/好書分享/個人興趣

【設計模式自習室】門面模式 Facade Pattern前言結構型——外觀模式/門面模式 Facade Pattern參考關注我

公衆号:後端技術漫談.jpg

如果文章對你有幫助,不妨收藏,投币,轉發,在看起來~