python 設計模式 簡單的工廠模式

2021-10-01 15:10:42 字數 3507 閱讀 2614

簡單工廠模式:又稱為靜態工廠方法模式,它屬於類建立型模式。在簡單工廠模式中,可以根據傳遞的引數的不同來返回不同的類的例項。簡單工廠模式專門定義乙個類來復責建立其他類的例項,被建立的例項通常都具有共同的父類。

比如: 現在有乙個人,他的工作是去砍樹,工具為花崗岩石斧頭和鐵斧頭,在兩種不同的社會環境下使用不同的工具,現在社會和原始社會。

class

person

(object):

'''建立乙個人的類'''

def__init__

(self,name)

: self.name = name

defwork

(self)

:print

("%s開始工作了"

%self.name)

# 在原始社會中使用石斧頭來砍樹

axe1 = stone_axe(

"花崗岩石斧"

)# 在現在社會使用鐵斧頭來砍樹

axe2 = steel_axe(

"鐵斧頭"

) axe1.cut_tree(

) axe2.cut_tree(

)class

axe(

object):

'''建立乙個斧頭類'''

def__init__

(self,name)

: self.name = name

defcut_tree

(self)

:print

("使用%s斧頭砍樹"

%self.name)

class

stone_axe

(axe)

:'''建立乙個石斧頭'''

defcut_tree

(self)

:# 重寫父類的 cut_tree 方法

print

("使用%s斧頭砍樹"

%self.name)

class

steel_axe

(axe)

:'''建立乙個鐵斧頭'''

defcut_tree

(self)

:print

("使用%s斧頭砍樹"

%self.name)

p1 = person(

"huang"

)p1.work(

)

上面的**是通常的模式,當需要 使用不同型別的斧頭時,需要在work方法中新增什麼斧頭,人 這個類 和 斧頭這個類的耦合性比較高,相互比較依賴,不利於**的擴充套件和維護,因此引入第三方類-- 工廠類來解決。

'''

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

降低**中兩類的耦合性,提高**的可維護性和擴充套件性,也就是引入第三方來降低這

兩個類的依賴關係。

'''class

person

(object):

'''建立乙個人的類'''

def__init__

(self,name)

: self.name = name

defwork

(self,

type):

print

("%s開始工作了"

%self.name)

# # 在原始社會中使用石斧頭來砍樹

# axe1 = stone_axe("花崗岩石斧")

# # 在現在社會使用鐵斧頭來砍樹

# axe2 = steel_axe("鐵斧頭")

# axe1.cut_tree()

# axe2.cut_tree()

# 已經有工廠來建立斧頭

axe = factory.create_axe(

type

) axe.cut_tree(

)class

axe(

object):

'''建立乙個斧頭類'''

def__init__

(self,name)

: self.name = name

defcut_tree

(self)

:print

("使用%s斧頭砍樹"

%self.name)

class

stone_axe

(axe)

:'''建立乙個石斧頭'''

defcut_tree

(self)

:# 重寫父類的 cut_tree 方法

print

("使用%s斧頭砍樹"

%self.name)

class

steel_axe

(axe)

:'''建立乙個鐵斧頭'''

defcut_tree

(self)

:print

("使用%s斧頭砍樹"

%self.name)

class

factory

(object):

'''工廠類'''

@staticmethod

defcreate_axe

(type):

'''建立乙個靜態方法,來生產斧頭'''

iftype

=="stone"

: axe = stone_axe(

"花崗岩石斧"

)return axe

elif

type

=="steel"

: axe = steel_axe(

"鐵斧頭"

)return axe

else

:print

("輸入錯誤,沒有此型別的斧頭"

)p1 = person(

"huang"

)p1.work(

"stone"

)

上面的是使用了工廠類 ,當人 需要什麼工具時,就向工廠裡要,工廠提供了不同的工具。這樣就不需要修改work 方法裡的**,只要傳遞不同的引數就可以實現用不同的工具。

但是簡單工廠模式最大的問題在於工廠類的職責相對過重,增加新的產品需要修改工廠類的判斷邏輯,這一點與開閉原則是相違背的。

簡單工廠模式的要點在於:當你需要什麼,只需要傳入乙個正確的引數,就可以獲取你所需要的物件,而無須知道其建立細節。

工廠模式的小結

簡單工廠模式最大的優點在於實現物件的建立和物件的使用分離,將物件的建立交給專門的工廠類負責,但是其最大的缺點在於工廠類不夠靈活,增加新的具體產品需要修改工廠類的判斷邏輯**,而且產品較多時,工廠方法**將會非常複雜。

適用的場景:

1、工廠類負責建立的物件比較少:由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。

2、客戶端只知道傳入工廠類的引數,對於如何建立物件不關心:客戶端既不需要關心建立細節,甚至連類名都不需要記住,只需要知道型別所對應的引數。

Python 設計模式 簡單工廠模式

簡單工廠模式,作為oo 乙個較為簡單的建立者設計模式。其主要思想,通過介面或繼承建立 不同的子類。現在乙個dom解析器作為父類,其中xml,soup 分別作為兩個不同解析方式,作為子類。vechicl 的建立 如下 1 外部依賴的介面,它遮蔽了我具體使用的第三方庫 2class omtree 3de...

Python設計模式 簡單工廠模式

what 建立型設計模式處理物件建立相關的問題,目標是當直接建立物件 在python中是通過 init 函式實現的 不太方便時,提供更好的方式。在工廠設計模式中,客戶端可以請求乙個物件,而無需知道這個物件來自 也就是,使用哪個類來生成這個物件。工廠背後的思想是簡化物件的建立。與客戶端自己基於類例項化...

Python設計模式 簡單工廠模式

結語工廠模式是乙個用來建立物件的設計模式。需要動態建立同一基類的不同物件時使用。實現了物件建立和使用的分離 客戶端無須知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可。由於工廠類集中了所有產品的建立邏輯,職責過重,一旦不能正常工作,整個系統都要受到影響 一旦新增新產品就不得不修改工...