1. 簡單工廠的概念
提供一個創建物件實體的功能,而無須關心其具體實作,被創建實體的型別可以是介面、抽象類,也可以是具體的類,
面向介面編程是java開發中的一個重要原則,介面的思想是“封裝隔離”,而簡單工廠的本質是選擇介面的某個具體實作, 從而達到隔離介面的呼叫方(客戶端)和介面的實作方的目的,介面的呼叫方,不需要知道介面的具體實作邏輯,只需要呼叫簡單工廠類就可以創建一個介面的實作,針對不同的實作,介面的呼叫方或是傳遞實作類的型別引數,或是通過IOC/DI注入介面的實作類,或是把介面的實作類資訊放置在組態檔里面,從而達到java的面向介面編程的封裝隔離的目的,
注意簡單工廠的重點在選擇,實作是已經做好了的,就算實作再簡單,也要由具體的實作類來實作,而不是在簡單工廠里面來實作,簡單工廠的目的在于為客戶端來選擇相應的實作,從而使得客戶端和實作之間解耦,這樣一來,具體實作發生了變化,就不用變動客戶端了,這個變化會被簡單工廠吸收和屏蔽掉,
2. 簡單工廠的結構和說明
簡單工廠的結構如下圖所示,

- Api: 定義客戶所需要的功能介面,
- ImplA、ImplB: 具體實作Api的實作類,可能會有1個、2個或者多個,
- Factory:工廠,選擇合適的實作類來創建Api介面物件,
- Client: 客戶端,通過Factory來獲取Api介面物件,然后面向Api介面編程,
3. 模式詳解
上圖所示的紅色線框,就好比是一個組件的包裝邊界,表示介面、實作類和工廠類組合的一個組件,在這個封裝體里面,只有介面和工廠是對外的也就是讓外部知道并使用的,所以故意漏了一些在紅線框外,而具體的實作類是不對外的,被完全包含在紅線框內,
對于客戶端而言,只是知道了介面Api和簡單工廠Factory,通過Factory就可以獲得Api了,這樣就達到了讓Client在不知道具體實作類的情況下獲取介面Api,
以上,通過把客戶端里面的“new Impl()”移動到簡單工廠類里面,從而達到了對客戶端(介面呼叫方)隔離介面實作類的目的,上圖為簡單工廠模式的形式化表示,也是該模式的本質關鍵所在,記住該圖,有助于后續對該模式的進一步深入理解,
4. 結語
剛學習設計模式,設計模式給我的感覺是看著設計模式的時候,好像懂了,但一放下書本,或是相關的參考資料,差不多很快又忘了,所以,本次及后續寫作設計模式學習筆記的目的,在于提供一個精簡的設計模式版本,供相關學習者參考學習記憶之用, 通過把重要的知識記錄下來,或是摘錄,同時寫下自己的理解,從而達到熟悉相關模式、方便記憶的目的,進而有助于后續深入理解相關模式,本次重點在于把基本的概念真正的消化,后續再深入細節,
5. 參考資源
《研磨設計模式》 陳臣、王斌 ,清華大學出版社,2011.5
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/246817.html
標籤:其他
