




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第python工廠方法模式原理與實(shí)現(xiàn)目錄一、簡(jiǎn)介二、工廠方法模式的主要角色三、簡(jiǎn)單工廠模式四、工廠模式五、抽象工廠模式總結(jié)
一、簡(jiǎn)介
工廠模式是屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。
在工廠模式中,我們?cè)趧?chuàng)建對(duì)象的過(guò)程中不會(huì)向客戶端暴露實(shí)現(xiàn)邏輯,而是通過(guò)一個(gè)共同的接口類來(lái)指向新創(chuàng)建的對(duì)象。
二、工廠方法模式的主要角色
抽象工廠(AbstractFactory):提供了創(chuàng)建產(chǎn)品的接口,調(diào)用者通過(guò)它訪問(wèn)具體工廠的工廠方法newProduct()來(lái)創(chuàng)建產(chǎn)品。
具體工廠(ConcreteFactory):主要實(shí)現(xiàn)抽象工廠中的抽象方法,完成具體產(chǎn)品的創(chuàng)建。
抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述了產(chǎn)品的主要特性和功能。
具體產(chǎn)品(ConcreteProduct):實(shí)現(xiàn)了抽象產(chǎn)品定義的接口,由具體工廠來(lái)創(chuàng)建,它同具體工廠之間一一對(duì)應(yīng)。
三、簡(jiǎn)單工廠模式
內(nèi)容:不直接向客戶端暴露對(duì)象創(chuàng)建實(shí)現(xiàn)的細(xì)節(jié),而是通過(guò)工廠類來(lái)負(fù)責(zé)創(chuàng)建產(chǎn)品類的實(shí)例。
具體代碼(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的一個(gè)元類,用于在Python程序中創(chuàng)建抽象基類,抽象基類中聲明的抽象方法,使用abstractmethod裝飾器裝飾。
簡(jiǎn)單明了的說(shuō):創(chuàng)建一個(gè)公共的抽象類,然后創(chuàng)建多個(gè)支付的類繼承這個(gè)抽象類,各種支付類里實(shí)現(xiàn)具體的支付方式,通過(guò)工廠類選擇支付方式,這樣客服端只實(shí)現(xiàn)支付方式,不需要知道具體的實(shí)現(xiàn)方法。
優(yōu)點(diǎn):
隱藏了對(duì)象創(chuàng)建的實(shí)現(xiàn)細(xì)節(jié)客戶端不需要修改代碼
缺點(diǎn):
違反了單一職責(zé)原則,將創(chuàng)建邏輯集中到一個(gè)工廠類里當(dāng)添加新產(chǎn)品時(shí),需要修改工廠類代碼,違反了開閉原則
四、工廠模式
內(nèi)容:定義了一個(gè)用于創(chuàng)建對(duì)象的接口(工廠類),讓工廠子類決定實(shí)例化哪一個(gè)產(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)容:定義一個(gè)工廠類接口,讓工廠子類來(lái)創(chuàng)建一系列相關(guān)或者相互依賴的對(duì)象。
與工廠模式相比,抽象工廠模式中的每一個(gè)產(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 識(shí)字1教學(xué)課件
- 2024-2025學(xué)年安徽省江南十校高一下學(xué)期5月份聯(lián)考政治試題及答案
- 江蘇省徐州市2024-2025學(xué)年高一下學(xué)期期末考試歷史試卷
- 無(wú)人機(jī)應(yīng)用技術(shù)4.14.影響無(wú)人機(jī)航拍的因素(棚拍)
- 無(wú)人機(jī)應(yīng)用技術(shù)3.4.室內(nèi)編隊(duì)飛行起飛前命令介紹
- AI大模型原生數(shù)據(jù)經(jīng)營(yíng)分析決策平臺(tái)建設(shè)方案
- 政治中考代表題目及答案
- 2025至2030年中國(guó)紅外線理療燈行業(yè)投資前景及策略咨詢報(bào)告
- 2025至2030年中國(guó)汽車輪胎智能安全預(yù)警系統(tǒng)行業(yè)投資前景及策略咨詢報(bào)告
- 鎮(zhèn)海煉化招聘題目及答案
- 2025至2030中國(guó)糠酸行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 江西省上饒市廣信區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期6月期末考試數(shù)學(xué)試卷(含答案)
- 糖尿病病人胰島素治療講課件
- 高壓氣體絕緣設(shè)備中SF6分解產(chǎn)物檢測(cè)SO2傳感器的設(shè)計(jì)與應(yīng)用
- poct科室管理制度
- 溝通與表達(dá)講課件
- 0號(hào)柴油安全技術(shù)說(shuō)明書SDS
- GA/T 1454-2018信息安全技術(shù)網(wǎng)絡(luò)型流量控制產(chǎn)品安全技術(shù)要求
- 中小學(xué)生防溺水安全教育PPT課件【愛生命防溺水】
- 礦山開采承包合同參考
- GA∕T 743-2016 閃光警告信號(hào)燈
評(píng)論
0/150
提交評(píng)論