最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年07月13日 11:00:52   作者:Leetao  
這篇文章主要介紹了Python 抽象工廠模式的優(yōu)缺點,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

前言

接著上一篇的故事工廠模式繼續(xù),手機(jī)要出廠,顯然光一個手機(jī)肯定是不行的,還需要包裝盒、充電器等等東西。我們按照上一篇提到的工廠模式,去建立新的工廠是一點都沒有問題的。但是思考一下這樣子做會帶來的問題,顯然工廠太多了,將包裝盒、充電器全部分散到各個工廠,組裝什么的也是一個大問題,那么有沒有更好的辦法呢?答案是肯定的,抽象工廠模式。

抽象工廠意圖

提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需制定它們具體的累。

別名

Kit

案例

第三階段

光生產(chǎn)手機(jī)遠(yuǎn)遠(yuǎn)不夠,還需要生產(chǎn)其他配件,分散到新的工廠成本太高,也不利于維護(hù),那就把一個類型的手機(jī)所需要的所有東西,都放到一個工廠完成,小米工廠生產(chǎn)小米手機(jī)以及小米手機(jī)配套的東西,蘋果手機(jī)生產(chǎn)蘋果手機(jī)以及蘋果手機(jī)配套的東西,客戶只需要關(guān)心要什么手機(jī)就行了。

第三階段 UML 圖

讓我們借助 UML 圖直觀了解一下這個時候工廠的樣子

第三階段代碼

通過代碼去實現(xiàn)這個邏輯

from abc import ABC, abstractmethod

# 抽象手機(jī) 
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")

# 抽象手機(jī)配件
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é)

如果代碼需要與多個不同系列的相關(guān)產(chǎn)品交互, 但是由于無法提前獲取相關(guān)信息, 或者出于對未來擴(kuò)展性的考慮, 你不希望代碼基于產(chǎn)品的具體類進(jìn)行構(gòu)建, 在這種情況下, 你可以使用抽象工廠。
在設(shè)計良好的程序中, 每個類僅負(fù)責(zé)一件事。 如果一個類與多種類型產(chǎn)品交互, 就可以考慮將工廠方法抽取到獨立的工廠類或具備完整功能的抽象工廠類中。

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

優(yōu)點

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

缺點

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

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

相關(guān)文章

  • python udp如何實現(xiàn)同時收發(fā)信息

    python udp如何實現(xiàn)同時收發(fā)信息

    這篇文章主要介紹了python udp如何實現(xiàn)同時收發(fā)信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python使用protobuf序列化和反序列化的實現(xiàn)

    Python使用protobuf序列化和反序列化的實現(xiàn)

    protobuf是一種二進(jìn)制的序列化格式,相對于json來說體積更小,傳輸更快,本文主要介紹了Python使用protobuf序列化和反序列化的實現(xiàn),感興趣的可以了解一下
    2021-05-05
  • Python多線程以及多線程中join()的使用方法示例

    Python多線程以及多線程中join()的使用方法示例

    join()是線程類Thread的方法,官方的說明是:等待這個線程結(jié)束,也就是說當(dāng)前線程等待這個線程結(jié)束后再繼續(xù)執(zhí)行,這篇文章主要給大家介紹了關(guān)于Python多線程以及多線程中join()使用的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Python?pyecharts?Boxplot箱線圖的實現(xiàn)

    Python?pyecharts?Boxplot箱線圖的實現(xiàn)

    本文主要介紹了Python?pyecharts?Boxplot箱線圖的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 如何在Python3中使用telnetlib模塊連接網(wǎng)絡(luò)設(shè)備

    如何在Python3中使用telnetlib模塊連接網(wǎng)絡(luò)設(shè)備

    這篇文章主要介紹了如何在Python3中使用telnetlib模塊連接網(wǎng)絡(luò)設(shè)備,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Python中的getter與setter及deleter使用示例講解

    Python中的getter與setter及deleter使用示例講解

    這篇文章主要介紹了Python中的getter與setter及deleter使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • 使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實例

    使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實例

    這篇文章主要介紹了使用Python編寫Linux系統(tǒng)守護(hù)進(jìn)程實例,本文先是講解了什么是守護(hù)進(jìn)程,然后給出了一個Python語言的簡單實現(xiàn),需要的朋友可以參考下
    2015-02-02
  • Python基礎(chǔ)之面向?qū)ο筮M(jìn)階詳解

    Python基礎(chǔ)之面向?qū)ο筮M(jìn)階詳解

    這篇文章主要為大家詳細(xì)介紹了Python基礎(chǔ)之面向?qū)ο筮M(jìn)階,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Python編程中使用Pillow來處理圖像的基礎(chǔ)教程

    Python編程中使用Pillow來處理圖像的基礎(chǔ)教程

    這篇文章主要介紹了Python編程中使用Pillow來處理圖像的基礎(chǔ)教程,Pillow和PIL都是Python下十分強(qiáng)大的圖片處理利器,朋友可以參考下
    2015-11-11
  • Python中xmltodict對xml的操作方式

    Python中xmltodict對xml的操作方式

    這篇文章主要介紹了Python中xmltodict對xml的操作方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

嘉荫县| 沈丘县| 麟游县| 龙江县| 蕲春县| 兴山县| 盐池县| 三都| 达拉特旗| 黑水县| 九寨沟县| 农安县| 岱山县| 新干县| 临清市| 定远县| 九台市| 井陉县| 纳雍县| 余干县| 赞皇县| 平远县| 浦城县| 西吉县| 沭阳县| 湄潭县| 鹰潭市| 西充县| 开鲁县| 台中市| 永顺县| 搜索| 兰考县| 家居| 黄陵县| 高邮市| 河池市| 日土县| 高阳县| 同江市| 巢湖市|