淺析Python 抽象工廠模式的優(yōu)缺點(diǎn)
前言
接著上一篇的故事工廠模式繼續(xù),手機(jī)要出廠,顯然光一個(gè)手機(jī)肯定是不行的,還需要包裝盒、充電器等等東西。我們按照上一篇提到的工廠模式,去建立新的工廠是一點(diǎn)都沒有問題的。但是思考一下這樣子做會(huì)帶來的問題,顯然工廠太多了,將包裝盒、充電器全部分散到各個(gè)工廠,組裝什么的也是一個(gè)大問題,那么有沒有更好的辦法呢?答案是肯定的,抽象工廠模式。
抽象工廠意圖
提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需制定它們具體的累。
別名
Kit
案例
第三階段
光生產(chǎn)手機(jī)遠(yuǎn)遠(yuǎn)不夠,還需要生產(chǎn)其他配件,分散到新的工廠成本太高,也不利于維護(hù),那就把一個(gè)類型的手機(jī)所需要的所有東西,都放到一個(gè)工廠完成,小米工廠生產(chǎn)小米手機(jī)以及小米手機(jī)配套的東西,蘋果手機(jī)生產(chǎn)蘋果手機(jī)以及蘋果手機(jī)配套的東西,客戶只需要關(guān)心要什么手機(jī)就行了。
第三階段 UML 圖
讓我們借助 UML 圖直觀了解一下這個(gè)時(shí)候工廠的樣子

第三階段代碼
通過代碼去實(shí)現(xiàn)這個(gè)邏輯
from abc import ABC, abstractmethod# 抽象手機(jī) class AbstractMobile(ABC): @abstractmethod def make(self): passclass XiaoMiMobile(AbstractMobile): def make(self): print('make xiaomi mobile') class AppleMobile(AbstractMobile): def make(self): print('make apple mobile')# 抽象手機(jī)配件class AbstractOthers(ABC): @abstractmethod def make(self): passclass XiaoMiOthers(AbstractMobile): def make(self): print('make xiaomi others') class AppleOthers(AbstractMobile): def make(self): print('make apple others')# 抽象工廠class AbstractFactory(ABC): @abstractmethod def create_mobile(self) -> AbstractMobile: pass @abstractmethod def create_others(self) -> AbstractOthers: passclass XiaoMiFactory(AbstractFactory): def create_mobile(self) -> XiaoMiMobile: return XiaoMiMobile().make() def create_others(self) -> XiaoMiOthers: return XiaoMiOthers().make()class AppleFactory(AbstractFactory): def create_mobile(self) -> AppleMobile: return AppleMobile().make() def create_others(self) -> AppleOthers: return AppleOthers().make() def client(factory: AbstractFactory) -> None: product_mobile = factory.create_mobile() product_others = factory.create_others() if __name__ == '__main__': client(XiaoMiFactory()) client(AppleFactory())
看一下運(yùn)行結(jié)果:
make xiaomi mobilemake xiaomi othersmake apple mobilemake apple others
總結(jié)
如果代碼需要與多個(gè)不同系列的相關(guān)產(chǎn)品交互, 但是由于無法提前獲取相關(guān)信息, 或者出于對(duì)未來擴(kuò)展性的考慮, 你不希望代碼基于產(chǎn)品的具體類進(jìn)行構(gòu)建, 在這種情況下, 你可以使用抽象工廠。在設(shè)計(jì)良好的程序中, 每個(gè)類僅負(fù)責(zé)一件事。 如果一個(gè)類與多種類型產(chǎn)品交互, 就可以考慮將工廠方法抽取到獨(dú)立的工廠類或具備完整功能的抽象工廠類中。
抽象工廠的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
你可以確保同一工廠生成的產(chǎn)品相互匹配。 你可以避免客戶端和具體產(chǎn)品代碼的耦合。 單一職責(zé)原則。 你可以將產(chǎn)品生成代碼抽取到同一位置, 使得代碼易于維護(hù)。 開閉原則。 向應(yīng)用程序中引入新產(chǎn)品變體時(shí), 你無需修改客戶端代碼缺點(diǎn)
由于采用該模式需要向應(yīng)用中引入眾多接口和類, 代碼可能會(huì)比之前更加復(fù)雜,即產(chǎn)品族擴(kuò)展非常困難以上就是淺析Python 抽象工廠模式的優(yōu)缺點(diǎn)的詳細(xì)內(nèi)容,更多關(guān)于Python 抽象工廠模式的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. idea刪除項(xiàng)目的操作方法2. Intellij Idea 多模塊Maven工程中模塊之間無法相互引用問題3. 刪除docker里建立容器的操作方法4. idea自定義快捷鍵的方法步驟5. IntelliJ IDEA導(dǎo)入項(xiàng)目的方法6. Intellij IDEA 關(guān)閉和開啟自動(dòng)更新的提示?7. docker /var/lib/docker/aufs/mnt 目錄清理方法8. IntelliJ IDEA創(chuàng)建web項(xiàng)目的方法9. IntelliJ IDEA設(shè)置默認(rèn)瀏覽器的方法10. IntelliJ IDEA配置Tomcat服務(wù)器的方法

網(wǎng)公網(wǎng)安備