python工廠方法模式原理與實現(xiàn)_第1頁
python工廠方法模式原理與實現(xiàn)_第2頁
python工廠方法模式原理與實現(xiàn)_第3頁
python工廠方法模式原理與實現(xiàn)_第4頁
python工廠方法模式原理與實現(xiàn)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論