工廠模式


參考資料:

https://www.imooc.com/learn/261

https://blog.csdn.net/wfg18801733667/article/details/60954744

工廠模式實踐代碼


1、工廠模式概念

  • 簡單工廠模式:由一個工廠對象根據收到的消息決定要創建哪一個類的對象實例。
  • 工廠方法模式: 定義一個創建對象的工廠接口,讓子類決定實例化哪一個類,將實際創建工作推遲到子類當中。
  • 抽象工廠: 抽象工廠是圍繞一個超級工廠創建其他工廠,該超級工廠又稱爲其他工廠的工廠。提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類

實例化對象,用工廠方法代替new操作。

工廠模式包括工廠方法模式、抽象工廠模式。

抽象工廠模式是工廠方法模式的擴展。

2、工廠模式的意圖

定義一個接口來創建對象,但是讓子類來決定哪些類需要被實例化。

工廠方法把實例化的工作推遲到子類中去實現。

項目中的現狀:

在軟件系統中經常面臨着“對象”的創建工作,由於需求的變化,這個對象可能隨之也會發生變化,但它卻擁有比較穩定的接口。

爲此,我們需要提供一種封裝機制來隔離出這個易變對象的變化,從而保持系統中其他依賴該對象的對象不隨着需求變化而變化。

如果我改變了某個對象,希望依賴於他的對象不隨之發生變化;

3、什麼情況下適合工廠模式

(1)有一組類似的對象需要創建;

(2)在編碼時不能預見需要創建哪種類的實例;

(3)系統需要考慮擴展性,不應依賴於產品類實例如何被創建、組合和表達的細節;

工廠類負責創建的對象比較少,客戶只需要傳入工廠類參數,對於如何創建對象(邏輯)不關心。

簡單工廠模式很容易違反高內聚低耦合的原則,因此一般只在很簡單的情況下使用。

4、工廠模式的設計思想

基於項目現狀將代碼進行如下設計:

1)、儘量鬆耦合,一個對象的依賴對象的變化與本身無關

2)、具體產品與客戶剝離,責任分割

5、工廠模式的應用場景

工廠模式的使用場景:

工廠類負責創建的對象比較少,客戶只需要傳入工廠類參數,對於如何創建對象(邏輯)不關心。

簡單工廠模式很容易違反高內聚低耦合的原則,因此一般只在很簡單的情況下使用。

工廠模式適用於哪些場景:

1、一個系統應當不依賴產品類實例被創立,組成,和表示的細節。這對應所有形態的工廠模式都是重要的;

2、這個系統的產品至少有一個的產品族;

3、同屬於同一個產品族的產品是設計成在一起使用的。這一約束必須得在系統的設計中體現出來;

4、不同的產品以一系列的接口的面貌出現,從而使系統不依賴於接口實現的細節;

工廠方法模式的使用場景:

1)、日誌記錄器:記錄可能記錄到本地硬盤、系統事件、遠程服務器等,用戶可以選擇記錄日誌到什麼地方。

2)、數據庫訪問,當用戶不知道最後系統採用哪一類數據庫,以及數據庫可能有變化時。

3)、設計一個連接服務器的框架,需要三個協議,“POP3”、“IMAP”、“HTTP”,可以把這三個作爲產品類,共同實現一個接口。

抽象工廠的使用場景:

系統的產品多於一個產品族,而系統只消費某一族的產品。

6、工廠模式的優缺點

優點:

工廠模式的實現幫助我們:

1、系統可以在不修改具體工廠角色的情況下引進新的產品;

2、客戶端不必關心對象如何創建,明確了職責;

3、更好的理解面向對象的原則,面向接口編程,而不要面向實現編程;

(1)工廠模式的優點

最大的優點在於工廠類中包含了必要的邏輯,根據客戶需要的邏輯動態實例化相關的類。

(2)工廠方法模式的優點

創建對象的接口,讓子類決定具體實例化的對象,把簡單的內部邏輯判斷移到了客戶端。

工廠方法模式克服了簡單工廠所違背的開閉原則的缺點,又保持了封裝對象創建過程的優點。

擴展性高,想要增加一個產品,只要擴展一個工廠類就可以。

(3)抽象工廠的優點

當一個產品族中的多個對象被設計成一起工作時,它能保證客戶端始終只使用同一個產品族中的對象。

缺點

** (1)簡單工廠模式的缺點**

每增加一個產品,相應的也要增加一個子工廠,加大了額外的開發量。

7、工廠方法模式和抽象工廠模式對比

1、工廠模式是一種極端情況的抽象工廠模式,而抽象工廠模式可以看成是工廠模式的推廣;

2、工廠模式用來創建一個產品的等級結構,而抽象工廠模式是用來創建多個產品的登記結構;

3、工廠模式只有一個抽象產品類,而抽象工廠模式有多個抽象產品類;

總結

無論是簡單工廠模式,工廠方法模式,還是抽象工廠模式,他們都屬於工廠模式,在形式和特點上也是極爲相似的,他們的最終目的都是爲了解耦。在使用時,我們不必去在意這個模式到底工廠方法模式還是抽象工廠模式,因爲他們之間的演變常常是令人琢磨不透的。經常你會發現,明明使用的工廠方法模式,當新需求來臨,稍加修改,加入了一個新方法後,由於類中的產品構成了不同等級結構中的產品族,它就變成抽象工廠模式了;而對於抽象工廠模式,當減少一個方法使的提供的產品不再構成產品族之後,它就演變成了工廠方法模式。


所以,在使用工廠模式時,只需要關心降低耦合度的目的是否達到了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章