亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:3日期:2022-07-17 16:38:55

前言

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

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

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

工廠意圖

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

別名

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

案例

第一階段

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

第一階段 UML 圖

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

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

第一階段代碼

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

from abc import ABC, abstractmethod# 手機(jī)class Phone(ABC): @abstractmethod def make(self): pass# 蘋果手機(jī)class Apple(Phone): def make(self): print('make apple')# 小米手機(jī)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()

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

make applemake xiaomi

第二階段

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

第二階段 UML 圖

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

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

第二階段代碼

同樣讓我們借助代碼去實(shí)現(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 factoryif __name__ == ’__main__’: xiaomi = client_product(XiaomiFactory()) xiaomi.product_phone() apple = client_product(AppleFactory()) apple.product_phone()

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

make xiaomimake apple

總結(jié)

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

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

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

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

優(yōu)點(diǎn):更符合開閉原則,增加一個(gè)產(chǎn)品類,則只需要實(shí)現(xiàn)其他具體的產(chǎn)品類和具體的工廠類即可;符合單一職責(zé)原則,每個(gè)工廠只負(fù)責(zé)生產(chǎn)對(duì)應(yīng)的產(chǎn)品 缺點(diǎn):增加一個(gè)產(chǎn)品,就需要實(shí)現(xiàn)對(duì)應(yīng)的具體工廠類和具體產(chǎn)品類;每個(gè)產(chǎn)品需要有對(duì)應(yīng)的具體工廠和具體產(chǎn)品類

以上就是淺析Python 簡單工廠模式和工廠方法模式的優(yōu)缺點(diǎn)的詳細(xì)內(nèi)容,更多關(guān)于Python 工廠模式的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 中日韩欧美一级毛片 | 草草视频网站 | 亚洲大片在线观看 | 亚洲国产精品成人久久 | 国模福利视频在线播放 | 网站视频大片www | 日韩经典第一页 | 亚洲国产成人超福利久久精品 | 日韩在线国产 | wwwwxxx日本| 在线v| 成人欧美一区二区三区小说 | 国产精品免费观看网站 | 成人网在线看 | 亚洲欧美成人中文日韩电影 | 亚洲国产午夜精品乱码 | 婷婷激情网站 | 九九热这里只有 | 欧美日本韩国一区 | 婷婷激情五月综合 | 久久久久久久综合狠狠综合 | 免费a级毛片网站 | 免费人成网站线观看合集 | 日韩国产欧美一区二区三区 | 国产探花视频在线观看 | 久草手机在线观看视频 | 亚洲一级色片 | 黄色网址在线免费观看 | freesexvideo性欧美tv2021 | 国产一级精品毛片 | 高清一区在线 | 日韩a级毛片免费观看 | 午夜在线视频国产 | 免费观看色视频 | 成人黄网18免费观看的网站 | 成人在线网| 黄色影院免费观看 | 国产黄色a | 一级片在线免费看 | 99久久精品国产片久人 | 黄色片在线观看免费 |