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

淺析Python 簡單工廠模式和工廠方法模式的優(yōu)缺點

 更新時間:2020年07月13日 10:49:16   作者:Leetao  
這篇文章主要介紹了Python 工廠模式的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下

前言

在《設(shè)計模式》一書中工廠模式提到了:

  • 工廠方法模式(Factory Method)
  • 抽象工廠模式 (Abstract Factory)

但是在實際過程中還有一種工廠模式經(jīng)常被使用,那就是 簡單工廠模式(Simple Factory)。有一種常見的分類的方法:根據(jù)產(chǎn)品是由具體產(chǎn)品還是具體工廠可以分為 工廠方法模式 和 簡單工廠模式;根據(jù)工廠的抽象程度可以分為 工廠方法模式 和 抽象工廠模式。接下來會通過例子對比簡單工廠模式和工廠方法模式。

工廠意圖

定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。Factory Method 使一個類的實例化延遲到其子類。

別名

虛構(gòu)造器(Virtual Constructor)

案例

第一階段

小李開了一個代工廠,專門幫各大廠商生產(chǎn)手機,一開始只有小米找他生產(chǎn)小米手機(MiPhone),后來質(zhì)量過硬,聲名遠播,蘋果公司也找上門了,準備讓他生產(chǎn)蘋果手機,生意來了,小李小手一揮,停工幾個月,加了一個生產(chǎn)線專門生成蘋果手機(Iphone)。于是乎,現(xiàn)在一個工廠有兩個生產(chǎn)線。

第一階段 UML 圖

讓我們借助 UML 圖直觀了解一下工廠現(xiàn)在的樣子。

第一階段代碼

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

from abc import ABC, abstractmethod

# 手機
class Phone(ABC):
 
 @abstractmethod
 def make(self):
 pass

# 蘋果手機
class Apple(Phone):
 
 def make(self):
 print("make apple")

# 小米手機
class XiaoMi(Phone):
 
 def make(self):
 print("make xiaomi")


class Factory:

 def product_phone(self, mobile_type):
 if mobile_type == 'apple':
  return Apple()
 else:
  return XiaoMi()


if __name__ == '__main__':
 factory = Factory()
 factory.product_phone('apple').make()
 factory.product_phone('xiaomi').make()

看一下運行結(jié)果:

make apple
make xiaomi

第二階段

隨著第一階段的訂單完成,現(xiàn)在越來越多的手機廠商來找小李來生產(chǎn)手機,問題來了,生產(chǎn)線改造需要導致整個工廠停工一段時間,每次停工對工廠來說都是巨大的損失。那么該怎么解決問題呢?一個工廠似乎不夠用了,那么該怎么解決呢? 把所有的生產(chǎn)線獨立出來到單獨的工廠,這樣子需要生產(chǎn)新的手機只需要新增新的工廠就好了,不會影響其他的手機的生產(chǎn)。

第二階段 UML 圖

同樣讓我們借助 UML 圖了解一下這個階段工廠的樣子吧。

第二階段代碼

同樣讓我們借助代碼去實現(xiàn)這一階段的邏輯

from abc import ABC, abstractmethod

# 抽象工廠
class AbastractFactory(ABC):
 
 @abstractmethod
 def product_phone(self):
 pass

# 蘋果工廠
class AppleFactory(AbastractFactory):
 
 def product_phone(self):
 return Apple().make()

# 小米工廠
class XiaomiFactory(AbastractFactory):
 
 def product_phone(self):
 return XiaoMi().make()
 

# 生產(chǎn)線
class Phone(ABC):
 	
 @abstractmethod
 def make(self):
 pass

# 蘋果生產(chǎn)線
class Apple(Phone):
 
 def make(self):
 print("make apple")

# 小米生產(chǎn)線
class XiaoMi(Phone):
 
 def make(self):
 print("make xiaomi")

def client_product(factory:AbastractFactory):
 return factory

if __name__ == '__main__':
 xiaomi = client_product(XiaomiFactory())
 xiaomi.product_phone()
 apple = client_product(AppleFactory())
 apple.product_phone()

看一下運行結(jié)果:

make xiaomi
make apple

總結(jié)

上面的案例中的倆個階段分別對應了兩個設(shè)計模式,分別是:**簡單工廠模式 **和 工廠方法模式。通過案例和對比,我們不難發(fā)現(xiàn)它們的的優(yōu)缺點。

簡單工廠模式優(yōu)缺點

  • 優(yōu)點:客戶端與產(chǎn)品的創(chuàng)建分離,客戶端不需要知道產(chǎn)品創(chuàng)建的邏輯,只需要消費該產(chǎn)品即可。
  • 缺點:工廠類集成了所有產(chǎn)品的創(chuàng)建邏輯,當工廠類出現(xiàn)問題,所有產(chǎn)品都會出現(xiàn)問題;還有當新增加產(chǎn)品都會修改工廠類,違背開閉原則

工廠方法模式優(yōu)缺點

  • 優(yōu)點:更符合開閉原則,增加一個產(chǎn)品類,則只需要實現(xiàn)其他具體的產(chǎn)品類和具體的工廠類即可;符合單一職責原則,每個工廠只負責生產(chǎn)對應的產(chǎn)品
  • 缺點:增加一個產(chǎn)品,就需要實現(xiàn)對應的具體工廠類和具體產(chǎn)品類;每個產(chǎn)品需要有對應的具體工廠和具體產(chǎn)品類

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

相關(guān)文章

  • 淺析python中SQLAlchemy排序的一個坑

    淺析python中SQLAlchemy排序的一個坑

    這篇文章主要介紹了關(guān)于python中SQLAlchemy排序的一個坑,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,感興趣的朋友們下面來一起學習學習吧。
    2017-02-02
  • python實現(xiàn)電腦操控安卓手機

    python實現(xiàn)電腦操控安卓手機

    網(wǎng)上雖然有很多教程,但是隨著版本的更新總有各種各樣的坑,本文以親身踏坑經(jīng)歷介紹了電腦使用python操控安卓手機,從安裝到使用方法,感興趣的可以了解一下
    2021-05-05
  • python ftp 按目錄結(jié)構(gòu)上傳下載的實現(xiàn)代碼

    python ftp 按目錄結(jié)構(gòu)上傳下載的實現(xiàn)代碼

    這篇文章主要介紹了python ftp 按目錄結(jié)構(gòu)上傳下載的實現(xiàn)代碼,需要的朋友可以參考下
    2018-09-09
  • djang常用查詢SQL語句的使用代碼

    djang常用查詢SQL語句的使用代碼

    這篇文章主要介紹了djang常用查詢SQL語句的使用代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02
  • python?opencv實現(xiàn)影像拼接

    python?opencv實現(xiàn)影像拼接

    這篇文章主要介紹了python?opencv實現(xiàn)影像拼接,主要包括內(nèi)容又垂直影像拼接vconcat和水平影像拼接hconcat以及縱向拼接多個不同圖片,下面詳細的相關(guān)內(nèi)容,需要的朋友可以參考一下
    2022-03-03
  • Python要如何實現(xiàn)列表排序的幾種方法

    Python要如何實現(xiàn)列表排序的幾種方法

    這篇文章主要介紹了Python要如何實現(xiàn)列表排序的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • django使用haystack調(diào)用Elasticsearch實現(xiàn)索引搜索

    django使用haystack調(diào)用Elasticsearch實現(xiàn)索引搜索

    這篇文章主要介紹了django使用haystack調(diào)用Elasticsearch實現(xiàn)索引搜索,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python中那些 Pythonic的寫法詳解

    Python中那些 Pythonic的寫法詳解

    這篇文章主要介紹了Python中那些 Pythonic的寫法詳解,一份優(yōu)雅、干凈、整潔的代碼通常自帶文檔和注釋屬性,讀代碼即是讀作者的思路,需要的朋友可以參考下
    2019-07-07
  • Python面向?qū)ο笾惖膬?nèi)置attr屬性示例

    Python面向?qū)ο笾惖膬?nèi)置attr屬性示例

    這篇文章主要介紹了Python面向?qū)ο笾惖膬?nèi)置attr屬性,結(jié)合實例形式分析了Python面向?qū)ο笾蓄惖膶傩韵嚓P(guān)定義、賦值、修改等操作技巧與注意事項,需要的朋友可以參考下
    2018-12-12
  • numpy.linspace 生成等差數(shù)組的方法

    numpy.linspace 生成等差數(shù)組的方法

    今天小編就為大家分享一篇numpy.linspace 生成等差數(shù)組的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評論

海城市| 兰考县| 湟源县| 平顺县| 独山县| 象州县| 溧阳市| 九寨沟县| 香港| 准格尔旗| 彩票| 嫩江县| 商城县| 惠州市| 萨嘎县| 池州市| 即墨市| 错那县| 墨江| 和龙市| 万载县| 石棉县| 图木舒克市| 逊克县| 固安县| 周至县| 平泉县| 迭部县| 永德县| 伊川县| 石楼县| 古蔺县| 耒阳市| 邳州市| 柞水县| 岳阳市| 固镇县| 云阳县| 齐齐哈尔市| 和政县| 肇庆市|