測試必認識的設計模式之工廠方法(函式)模式

2021-10-05 04:04:09 字數 3128 閱讀 2277

專業版:

工廠方法(函式)模式應用的場景和簡單工廠模式是一致的,只是工廠方法模式更符合開閉原則了。

如果說簡單工廠模式是一家小工廠的話,那工廠方法模式就可以理解為乙個工業園區,工業園區中有很多企業,每個企業只生產自己的產品,但工業園區中的每個企業必須要遵守園區的規則(這是核心),工業園區就想簡單工廠模式中的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 這個總結沒有及時地動手去做,不過現在有時間了 ...