《設計模式》之簡單工廠模式

2021-07-06 02:27:05 字數 1885 閱讀 9000

簡單工廠模式****** factory根據提供給它的資料(就是引數),返回乙個類的例項。通常它返回的類都有乙個公共的父類(或者介面物件)。

簡單工廠模式的uml圖

簡單工廠的作用是例項化物件,而不需要客戶了解這個物件屬於哪個具體的子類。簡單工廠例項化的類具有相同的介面或者基類,在子模擬較固定並不需要擴充套件時,可以使用簡單工廠。

採用簡單工廠的優點是可以使使用者根據引數獲得對應的類例項,避免了直接例項化類,降低了耦合性;缺點是可例項化的型別在編譯期間已經被確定,如果增加新類 型,則需要修改工廠,不符合ocp(開閉原則)的原則。簡單工廠需要知道所有要生成的型別,當子類過多或者子類層次過多時不適合使用。

以車為例,具體車類有:寶馬、奧迪

簡單工廠類根據使用者需求來例項化物件

抽象產品介面

package com.wrh.samplefactory;

public

inte***ce car

具體產品類:寶馬車

package com.wrh.samplefactory;

//具體產品類:寶馬車

public

class

bmwimplements

car @override

public string getname()

}

具體產品類:奧迪車

package com.wrh.samplefactory;

//具體產品類:奧迪車

public

class

audi

implements

car @override

public string getname()

}

簡單工廠類:根據使用者需求返回不同產品例項物件

package com.wrh.samplefactory;

public

class samplefactory

else

if(name=="audi")

else}}

客戶端

package com.wrh.samplefactory;

public

class test

}

優點:工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的資訊,決定究竟應該建立哪個具體類的物件。使用者在使用時可以直接根據工廠類去建立所需的例項,而無需了解這些物件是如何建立以及如何組織的。有利於整個軟體體系結構的優化。

缺點:由於工廠類集中了所有例項的建立邏輯,這就直接導致一旦這個工廠出了問題,所有的客戶端都會受到牽連;而且由於簡單工廠模式的產品室基於乙個共同的抽象類或者介面,這樣一來,但產品的種類增加的時候,即有不同的產品介面或者抽象類的時候,工廠類就需要判斷何時建立何種種類的產品,這就和建立何種種類產品的產品相互混淆在了一起,違背了單一職責,導致系統喪失靈活性和可維護性。而且更重要的是,簡單工廠模式違背了「開放封閉原則」,就是違背了「系統對擴充套件開放,對修改關閉」的原則,因為當我新增加乙個產品的時候必須修改工廠類,相應的工廠類就需要重新編譯一遍。

小結一下:簡單工廠模式分離產品的建立者和消費者,有利於軟體系統結構的優化;但是由於一切邏輯都集中在乙個工廠類中,導致了沒有很高的內聚性,同時也違背了「開放封閉原則」。另外,簡單工廠模式的方法一般都是靜態的,而靜態工廠方法是無法讓子類繼承的,因此,簡單工廠模式無法形成基於基類的繼承樹結構。

參考博文:

設計模式 工廠模式之簡單工廠模式

定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...

設計模式 工廠模式之簡單工廠

工廠模式可以分為 簡單工廠模式 普通工廠模式 靜態工廠模式 抽象工廠模式 簡單工廠模式 就是如何去例項化物件的問題,對於很容易變化的問題,應該考慮用乙個單獨的類來做這個創造例項的過程,這個單獨的類就是工廠 例子 通過簡單工廠建立各種圖形的實現過程 簡單工廠模式建立步驟 建立乙個介面 例 圖形介面 建...

設計模式 工廠模式之簡單工廠

我們常見的設計模式,大致可以分為三大類 建立型 結構性 行為型。工廠模式,屬於建立型。工廠模式到底起的是什麼作用呢?概括來說就是解耦。當某一類物件需要頻繁建立的時候,就會和程式產生比較大的耦合,在物件初始化屬性較多時,工廠模式可以較少這種耦合,這就是他的作用。一般情況下根據場景不同,工廠模式有幾種不...