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

第三階段代碼
通過代碼去實現(xiàn)這個邏輯
from abc import ABC, abstractmethod
# 抽象手機
class AbstractMobile(ABC):
@abstractmethod
def make(self):
pass
class XiaoMiMobile(AbstractMobile):
def make(self):
print("make xiaomi mobile")
class AppleMobile(AbstractMobile):
def make(self):
print("make apple mobile")
# 抽象手機配件
class AbstractOthers(ABC):
@abstractmethod
def make(self):
pass
class 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:
pass
class 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())
看一下運行結(jié)果:
make xiaomi mobile
make xiaomi others
make apple mobile
make apple others
總結(jié)
如果代碼需要與多個不同系列的相關產(chǎn)品交互, 但是由于無法提前獲取相關信息, 或者出于對未來擴展性的考慮, 你不希望代碼基于產(chǎn)品的具體類進行構建, 在這種情況下, 你可以使用抽象工廠。
在設計良好的程序中, 每個類僅負責一件事。 如果一個類與多種類型產(chǎn)品交互, 就可以考慮將工廠方法抽取到獨立的工廠類或具備完整功能的抽象工廠類中。
抽象工廠的優(yōu)缺點
優(yōu)點
- 你可以確保同一工廠生成的產(chǎn)品相互匹配。
- 你可以避免客戶端和具體產(chǎn)品代碼的耦合。
- 單一職責原則。 你可以將產(chǎn)品生成代碼抽取到同一位置, 使得代碼易于維護。
- 開閉原則。 向應用程序中引入新產(chǎn)品變體時, 你無需修改客戶端代碼
缺點
- 由于采用該模式需要向應用中引入眾多接口和類, 代碼可能會比之前更加復雜,即產(chǎn)品族擴展非常困難
以上就是淺析Python 抽象工廠模式的優(yōu)缺點的詳細內(nèi)容,更多關于Python 抽象工廠模式的資料請關注腳本之家其它相關文章!
相關文章
python udp如何實現(xiàn)同時收發(fā)信息
這篇文章主要介紹了python udp如何實現(xiàn)同時收發(fā)信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
Python使用protobuf序列化和反序列化的實現(xiàn)
protobuf是一種二進制的序列化格式,相對于json來說體積更小,傳輸更快,本文主要介紹了Python使用protobuf序列化和反序列化的實現(xiàn),感興趣的可以了解一下2021-05-05
Python?pyecharts?Boxplot箱線圖的實現(xiàn)
本文主要介紹了Python?pyecharts?Boxplot箱線圖的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05
如何在Python3中使用telnetlib模塊連接網(wǎng)絡設備
這篇文章主要介紹了如何在Python3中使用telnetlib模塊連接網(wǎng)絡設備,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09
Python中的getter與setter及deleter使用示例講解
這篇文章主要介紹了Python中的getter與setter及deleter使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-01-01

