欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析Python 抽象工廠模式的優(yōu)缺點

 更新時間:2020年07月13日 11:00:52   作者:Leetao  
這篇文章主要介紹了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)品的具體類進行構(gòu)建, 在這種情況下, 你可以使用抽象工廠。
在設計良好的程序中, 每個類僅負責一件事。 如果一個類與多種類型產(chǎn)品交互, 就可以考慮將工廠方法抽取到獨立的工廠類或具備完整功能的抽象工廠類中。

抽象工廠的優(yōu)缺點

優(yōu)點

  • 你可以確保同一工廠生成的產(chǎn)品相互匹配。
  • 你可以避免客戶端和具體產(chǎn)品代碼的耦合。
  • 單一職責原則。 你可以將產(chǎn)品生成代碼抽取到同一位置, 使得代碼易于維護。
  • 開閉原則。 向應用程序中引入新產(chǎn)品變體時, 你無需修改客戶端代碼

缺點

  • 由于采用該模式需要向應用中引入眾多接口和類, 代碼可能會比之前更加復雜,即產(chǎn)品族擴展非常困難

以上就是淺析Python 抽象工廠模式的優(yōu)缺點的詳細內(nèi)容,更多關于Python 抽象工廠模式的資料請關注腳本之家其它相關文章!

相關文章

  • Django框架模型簡單介紹與使用分析

    Django框架模型簡單介紹與使用分析

    這篇文章主要介紹了Django框架模型簡單介紹與使用,結(jié)合實例形式分析了Django框架中模型的概念、原理、使用技巧與相關操作注意事項,需要的朋友可以參考下
    2019-07-07
  • python修改全局變量可以不加global嗎?

    python修改全局變量可以不加global嗎?

    這篇文章主要探討的是python修改全局變量可不可以不加global,我們在局部作用域內(nèi)使用全局變量,需要使用global關鍵字進行聲明,不然便不可用,但下面小編就和大家分享可以修改的數(shù)據(jù)類型在函數(shù)內(nèi)部做修改操作是不需要聲明global的商務情況,需要的朋友可以參考下
    2022-02-02
  • Python爬蟲實戰(zhàn)之批量下載快手平臺視頻數(shù)據(jù)

    Python爬蟲實戰(zhàn)之批量下載快手平臺視頻數(shù)據(jù)

    讀萬卷書不如行萬里路,學的扎不扎實要通過實戰(zhàn)才能看出來,本篇文章手把手帶你批量下載快手平臺視頻數(shù)據(jù),大家可以在過程中查缺補漏,看看自己掌握程度怎么樣
    2021-10-10
  • 在keras 中獲取張量 tensor 的維度大小實例

    在keras 中獲取張量 tensor 的維度大小實例

    這篇文章主要介紹了在keras 中獲取張量 tensor 的維度大小實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 在python中使用nohup命令說明

    在python中使用nohup命令說明

    這篇文章主要介紹了在python中使用nohup命令說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python協(xié)程asyncio模塊的演變及高級用法

    Python協(xié)程asyncio模塊的演變及高級用法

    網(wǎng)上很多關于Python協(xié)程asyncio模塊的教程都是基于老版Python的, 本文將以對比方式展示新老Python版本下協(xié)程的寫法有什么不同并總結(jié)了asyncio的一些高級用法, 包括如何獲取協(xié)程任務執(zhí)行結(jié)果,gather和wait方法的區(qū)別以及如何給任務添加回調(diào)函數(shù)。
    2021-05-05
  • Python實現(xiàn)一個簡單的MySQL類

    Python實現(xiàn)一個簡單的MySQL類

    這篇文章主要介紹了Python實現(xiàn)一個簡單的MySQL類,可實現(xiàn)基本的初始化連接及查詢、刪除等功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • Python基于列表模擬堆棧和隊列功能示例

    Python基于列表模擬堆棧和隊列功能示例

    這篇文章主要介紹了Python基于列表模擬堆棧和隊列功能,簡單描述了隊列與堆棧的特點,并結(jié)合列表相關函數(shù)分析了隊列的出隊、進隊及堆棧的出棧、入棧等操作實現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • python實現(xiàn)獲取電腦所連接的wifi密碼

    python實現(xiàn)獲取電腦所連接的wifi密碼

    電腦連接wifi后,很難直觀地看到當前連接wifi的密碼,需要借助命令行公管局才可以查看到相關信息,本文為大家介紹一下如何利用python獲取電腦所連接的wifi密碼,感興趣的可以了解下
    2023-11-11
  • python批量修改圖片大小的方法

    python批量修改圖片大小的方法

    這篇文章主要為大家詳細介紹了python批量修改圖片大小的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評論