專業版:
工廠方法(函式)模式應用的場景和簡單工廠模式是一致的,只是工廠方法模式更符合開閉原則了。
如果說簡單工廠模式是一家小工廠的話,那工廠方法模式就可以理解為乙個工業園區
,工業園區中有很多企業
,每個企業只生產自己的產品,但工業園區中的每個企業必須要遵守園區的規則(這是核心)
,工業園區就想簡單工廠模式中的food,企業就像簡單工廠模式中的水果。
來看**
# 企業
class
pea:
defcreate_fruit
(self)
:print
('pea'
)class
kale
:def
create_fruit
(self)
:print
('kale'
)class
celery
:def
create_fruit
(self)
:print
('celery'
)# 園區規則
class
foodfactory
:def
create_fruit
(self)
:pass
# kale企業
class
kalefactory
(foodfactory)
:def
create_fruit
(self, name)
:if name ==
'kale'
:return kale(
)# pea企業
class
peafactory
(foodfactory)
:def
create_fruit
(self, name)
:if name ==
'pea'
:return pea(
)# celery企業
class
celeryfactory
(foodfactory)
:def
create_fruit
(self, name)
:if name ==
'celery'
:return celery(
)if __name__ ==
'__main__'
: kale = kalefactory(
).create_fruit(
'kale'
).create_fruit(
) pea = peafactory(
).create_fruit(
'pea'
).create_fruit(
) celery = celeryfactory(
).create_fruit(
'celery'
).create_fruit(
)
結果kale
peacelery
工廠方法模式將原來的if語句拆分成類,每個if支路變成乙個具體的工廠類,每個具體的工廠類繼承統一的工廠類(這個不就相當於園區的規則嗎)。
這就解決了修改**的問題,你想想,如果要新增乙個企業,我們只要新增乙個企業類和乙個企業工廠類就完事了,不用修改以前的**。
# 企業
class
pea:
defcreate_fruit
(self)
:print
('pea'
)class
kale
:def
create_fruit
(self)
:print
('kale'
)class
celery
:def
create_fruit
(self)
:print
('celery'
)# 新蘋果類
class
:def
create_fruit
(self)
:print()
# 園區規則
class
foodfactory
:def
create_fruit
(self)
:pass
# kale企業
class
kalefactory
(foodfactory)
:def
create_fruit
(self, name)
:if name ==
'kale'
:return kale(
)# pea企業
class
peafactory
(foodfactory)
:def
create_fruit
(self, name)
:if name ==
'pea'
:return pea(
)# celery企業
class
celeryfactory
(foodfactory)
:def
create_fruit
(self, name)
:if name ==
'celery'
:return celery(
)# 新蘋果企業
class
(foodfactory)
:def
create_fruit
(self, name)
:if name ==
:)
但是,還是有問題,如果類很多很多的話,要新建很多很多的水果類和水果企業類,也太麻煩了,
因此大佬又出現了。
某天晚上,大佬看著滿屏的**,思考我能不能再把它公升級下,讓它再次進化,想了一夜也沒想到如何實現。
早晨,蹲坑正用力時,突然一道靈光如開天闢地時第一道真理之光一樣照進大佬的腦中,他馬上提上褲子,跑到電腦旁開始擼碼!
抽象工廠模式就此誕生!!
測試必認識的設計模式之抽象工廠模式
專業版 簡單工廠模式是乙個小工廠,工廠方法模式是乙個園區,抽象工廠模式是乙個區,如某城市的高新區,在這個高新區中有很多園區,其中有軟體園,工業園等等,高新區作為最高端別的工廠類,我們把它叫做超級工廠,我們把其中的園區叫做普通工廠。直接看 吧!先看軟體園 class softwarecompany d...
設計模式之工廠方法
工廠方法是在簡單工廠的基礎上的進一步抽象,在簡單工廠中,所有的物件都是通過乙個工廠來建立,在工廠方法中,每個物件都有特定的工廠來建立。抽象介面 車 package com.yf.designpattern.factorymethod public inte ce car 具體實現類 寶馬和賓士 pa...
設計模式之工廠方法
言歸正傳,後來 我們開始了重頭戲 設計模式 工廠三姐妹,因為十三期的師弟沒有接觸過這些知識二來因為自己學藝不精,所以當時講得有些吃力,這就尷尬了 是吧 為了挽回一點顏面,當下決定回去寫一篇部落格,但是 經常說 但是 不好 不過因為因為一直奮戰在itoo 這個總結沒有及時地動手去做,不過現在有時間了 ...