




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第python工廠方法模式原理與實現(xiàn)目錄一、簡介二、工廠方法模式的主要角色三、簡單工廠模式四、工廠模式五、抽象工廠模式總結(jié)
一、簡介
工廠模式是屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。
在工廠模式中,我們在創(chuàng)建對象的過程中不會向客戶端暴露實現(xiàn)邏輯,而是通過一個共同的接口類來指向新創(chuàng)建的對象。
二、工廠方法模式的主要角色
抽象工廠(AbstractFactory):提供了創(chuàng)建產(chǎn)品的接口,調(diào)用者通過它訪問具體工廠的工廠方法newProduct()來創(chuàng)建產(chǎn)品。
具體工廠(ConcreteFactory):主要實現(xiàn)抽象工廠中的抽象方法,完成具體產(chǎn)品的創(chuàng)建。
抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述了產(chǎn)品的主要特性和功能。
具體產(chǎn)品(ConcreteProduct):實現(xiàn)了抽象產(chǎn)品定義的接口,由具體工廠來創(chuàng)建,它同具體工廠之間一一對應(yīng)。
三、簡單工廠模式
內(nèi)容:不直接向客戶端暴露對象創(chuàng)建實現(xiàn)的細(xì)節(jié),而是通過工廠類來負(fù)責(zé)創(chuàng)建產(chǎn)品類的實例。
具體代碼(jiandan.py):
fromabcimportABCMeta,abstractmethod
classPayment(meta"微信支付%s"%money)
return
classAlipay(Payment):
def__init__(self,huabei=False):
self.huabei=huabei
defpay(self,money):
ifself.huabei:
print("花唄支付%s"%money)
else:
print("支付寶余額支付%s"%money)
classPaymentFactory:
defcreate_pay(self,method):
ifmethod=="wechat":
returnWechatPay()
elifmethod=="alipay":
returnAlipay()
elifmethod=="huabei":
returnAlipay(huabei=True)
else:
raiseTypeError("Nosuchpaymentname%s"%method)
#client
pf=PaymentFactory()
p=pf.create_pay("huabei")
p.pay(100)
結(jié)果:
ABCMeta是python的一個元類,用于在Python程序中創(chuàng)建抽象基類,抽象基類中聲明的抽象方法,使用abstractmethod裝飾器裝飾。
簡單明了的說:創(chuàng)建一個公共的抽象類,然后創(chuàng)建多個支付的類繼承這個抽象類,各種支付類里實現(xiàn)具體的支付方式,通過工廠類選擇支付方式,這樣客服端只實現(xiàn)支付方式,不需要知道具體的實現(xiàn)方法。
優(yōu)點:
隱藏了對象創(chuàng)建的實現(xiàn)細(xì)節(jié)客戶端不需要修改代碼
缺點:
違反了單一職責(zé)原則,將創(chuàng)建邏輯集中到一個工廠類里當(dāng)添加新產(chǎn)品時,需要修改工廠類代碼,違反了開閉原則
四、工廠模式
內(nèi)容:定義了一個用于創(chuàng)建對象的接口(工廠類),讓工廠子類決定實例化哪一個產(chǎn)品類。
具體代碼(factory_method.py):
fromabcimportABCMeta,abstractmethod
classPayment(meta"微信支付%s"%money)
return
classAlipay(Payment):
def__init__(self,huabei=False):
self.huabei=huabei
defpay(self,money):
ifself.huabei:
print("花唄支付%s"%money)
else:
print("支付寶余額支付%s"%money)
classPaymentFactory(meta>
結(jié)果:
五、抽象工廠模式
內(nèi)容:定義一個工廠類接口,讓工廠子類來創(chuàng)建一系列相關(guān)或者相互依賴的對象。
與工廠模式相比,抽象工廠模式中的每一個產(chǎn)品都生產(chǎn)一套產(chǎn)品。
具體代碼(abstract_factory.py):
fromabcimportABCMeta,abstractmethod
classPhoneShell(meta"普通手機(jī)殼小手機(jī)殼")
classBigShell(PhoneShell):
defshow_shell(self):
print("普通手機(jī)殼大手機(jī)殼")
classAppleShell(PhoneShell):
defshow_shell(self):
print("蘋果手機(jī)殼")
classSnapDragonCPU(CPU):
defshow_cpu(self):
print("驍龍CPU")
classMediaTekCPU(CPU):
defshow_cpu(self):
print("聯(lián)發(fā)科CPU")
classAppleCPU(CPU):
defshow_cpu(self):
print("蘋果CPU")
classAppleOS(OS):
defshow_os(self):
print("蘋果OS系統(tǒng)")
classAndroidOS(OS):
defshow_os(self):
print("Android系統(tǒng)")
classIOS(OS):
defshow_os(self):
print("IOS系統(tǒng)")
#具體工廠
classMiFactory(PhoneFactory):
defmake_cpu(self):
returnSnapDragonCPU()
defmake_os(self):
returnAndroidOS()
defmake_shell(self):
returnBigShell()
classHuaweiFactory(PhoneFactory):
defmake_cpu(self):
returnMediaTekCPU()
defmake_os(self):
returnAndroidOS()
defmake_shell(self):
returnSmallShell()
classIPhoneFactory(PhoneFactory):
defmake_cpu(self):
returnAppleCPU()
defmake_os(self):
returnAppleOS()
defmake_shell(self):
returnAppleShell()
classPhone:
def__init__(self,cpu,os,shell):
self.cpu=cpu
self.os=os
self.shell=shell
defshow_info(self):
print("手機(jī)信息:")
self.cpu.show_cpu()
self.os.show_os()
self.shell.show_shell()
defmake_phone(factory):
cpu=factory.make_cpu()
os=factory.make_os()
shell=factory.make_shell()
returnPhone(cpu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 輪椅電動租賃合同協(xié)議
- 產(chǎn)品研發(fā)及知識產(chǎn)權(quán)保護(hù)合同
- 服裝產(chǎn)業(yè)協(xié)議書
- 輕傷責(zé)任協(xié)議書范本
- 保潔勞務(wù)派遣協(xié)議保潔員勞務(wù)派遣
- 道路維護(hù)協(xié)議書模板
- 過期牛奶收售合同協(xié)議
- 車強(qiáng)險合同協(xié)議
- 與客戶簽訂的合同協(xié)議書
- 運(yùn)營方合作合同協(xié)議
- 通信基站維保投標(biāo)方案(技術(shù)方案)
- 信息化運(yùn)維服務(wù)投標(biāo)方案(技術(shù)方案)
- 一方出資金一方出資源合作協(xié)議范本
- 中班禁毒安全《罌粟的危害》
- 合同及形式發(fā)票
- 公共行政學(xué):管理、政治和法律的途徑
- 高齡孕婦管理
- 2023北斗全球?qū)Ш叫l(wèi)星系統(tǒng)(GNSS)高精度導(dǎo)航型天線通用規(guī)范
- 旅游管理專業(yè)申報匯報
- 小學(xué)心理健康教育- 做情緒的主人教學(xué)課件設(shè)計
- 部編人教版二年級道德與法治下冊同步練習(xí)(全冊)
評論
0/150
提交評論