簡單工廠模式:又稱為靜態工廠方法模式,它屬於類建立型模式。在簡單工廠模式中,可以根據傳遞的引數的不同來返回不同的類的例項。簡單工廠模式專門定義乙個類來復責建立其他類的例項,被建立的例項通常都具有共同的父類。
比如: 現在有乙個人,他的工作是去砍樹,工具為花崗岩石斧頭和鐵斧頭,在兩種不同的社會環境下使用不同的工具,現在社會和原始社會。
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設計模式 簡單工廠模式
結語工廠模式是乙個用來建立物件的設計模式。需要動態建立同一基類的不同物件時使用。實現了物件建立和使用的分離 客戶端無須知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可。由於工廠類集中了所有產品的建立邏輯,職責過重,一旦不能正常工作,整個系統都要受到影響 一旦新增新產品就不得不修改工...