一分鐘了解python的抽象工廠
Python 抽象工廠模式是一種常用的設(shè)計(jì)模式,它主要的作用是提供一個(gè)接口來創(chuàng)建一系列相關(guān)或依賴對象的族系列,而無需指定實(shí)際創(chuàng)建的具體類。如果我們需要改變對象的類型,可以只需改變抽象工廠所創(chuàng)建的具體對象,而不必修改任何其他代碼。在本文中,我們將通過一個(gè)例子來詳細(xì)講解 Python 抽象工廠模式的用法。
?示例背景
?假設(shè)我們正在開發(fā)一個(gè)商城系統(tǒng),該系統(tǒng)要求支持多種支付方式,如現(xiàn)金、信用卡、支付寶和微信支付等。我們需要實(shí)現(xiàn)一個(gè)抽象工廠來創(chuàng)建不同類型的支付方式。
?定義抽象工廠
?首先,我們需要定義一個(gè)抽象工廠接口,該接口定義了創(chuàng)建不同支付方式的方法,包括 create_cash_pay()、create_credit_pay()、create_alipay() 和 create_wechat_pay():
?from abc import ABC, abstractmethod
?class PaymentFactory(ABC):
? ? @abstractmethod
? ? def create_cash_pay(self) -> 'CashPay':
? ? ? ? pass
? ? ?@abstractmethod
? ? def create_credit_pay(self) -> 'CreditPay':
? ? ? ? pass
? ? ?@abstractmethod
? ? def create_alipay(self) -> 'Alipay':
? ? ? ? pass
? ? ?@abstractmethod
? ? def create_wechat_pay(self) -> 'WechatPay':
? ? ? ? pass
?其中,abstractmethod 裝飾器用于指定該方法為抽象方法,子類必須實(shí)現(xiàn)該方法。
?定義具體工廠類
?接下來,我們需要定義具體的工廠類,例如現(xiàn)金支付工廠、信用卡支付工廠等等,這些工廠類都需要繼承自 PaymentFactory 抽象工廠,并實(shí)現(xiàn) create_cash_pay()、create_credit_pay()、create_alipay() 和 create_wechat_pay() 方法,例如:
?class CashPaymentFactory(PaymentFactory):
? ? def create_cash_pay(self) -> 'CashPay':
? ? ? ? return CashPay()
? ? ?def create_credit_pay(self) -> 'CreditPay':
? ? ? ? return None
? ? ?def create_alipay(self) -> 'Alipay':
? ? ? ? return Alipay()
? ? ?def create_wechat_pay(self) -> 'WechatPay':
? ? ? ? return WechatPay()
?class CreditPaymentFactory(PaymentFactory):
? ? def create_cash_pay(self) -> 'CashPay':
? ? ? ? return None
? ? ?def create_credit_pay(self) -> 'CreditPay':
? ? ? ? return CreditPay()
? ? ?def create_alipay(self) -> 'Alipay':
? ? ? ? return None
? ? ?def create_wechat_pay(self) -> 'WechatPay':
? ? ? ? return WechatPay()
?定義具體產(chǎn)品類
?然后,我們需要定義具體的產(chǎn)品類,包括現(xiàn)金支付、信用卡支付、支付寶和微信支付等。這些產(chǎn)品類都需要實(shí)現(xiàn)相應(yīng)的方法,例如:
?class CashPay:
? ? def pay(self, amount):
? ? ? ? print(f"Pay {amount} yuan in cash.")
?class CreditPay:
? ? def pay(self, amount):
? ? ? ? print(f"Pay {amount} yuan by credit card.")
?class Alipay:
? ? def pay(self, amount):
? ? ? ? print(f"Pay {amount} yuan by Alipay.")
?class WechatPay:
? ? def pay(self, amount):
? ? ? ? print(f"Pay {amount} yuan by Wechat Pay.")
?使用抽象工廠
?現(xiàn)在,我們可以在主程序中使用具體的工廠類來創(chuàng)建不同類型的支付方式,例如:
?if __name__ == "__main__":
? ? cash_factory = CashPaymentFactory()
? ? cash_pay = cash_factory.create_cash_pay()
? ? cash_pay.pay(100)
? ? ?credit_factory = CreditPaymentFactory()
? ? credit_pay = credit_factory.create_credit_pay()
? ? credit_pay.pay(200)
? ? ?alipay = cash_factory.create_alipay()
? ? alipay.pay(300)
? ? ?wechat_pay = credit_factory.create_wechat_pay()
? ? wechat_pay.pay(400)
?輸出如下:
?Pay 100 yuan in cash.
Pay 200 yuan by credit card.
Pay 300 yuan by Alipay.
Pay 400 yuan by Wechat Pay.
?通過使用抽象工廠模式,我們成功創(chuàng)建了不同類型的支付方式對象,而不需要直接實(shí)例化 CashPay、CreditPay、Alipay 或 WechatPay 類。在創(chuàng)建對象的過程中,我們只需要使用具體的工廠類來創(chuàng)建相應(yīng)的產(chǎn)品對象,從而實(shí)現(xiàn)了對象的解耦。這種方式非常方便,因?yàn)槲覀兛梢暂p松添加新的支付方式,只需要實(shí)現(xiàn)相應(yīng)的具體產(chǎn)品類和工廠類,而不需要修改主程序代碼。這樣,我們的代碼也更加具有可維護(hù)性。
?總結(jié)
?Python 抽象工廠模式是一種常見的設(shè)計(jì)模式,用于提供一個(gè)接口來創(chuàng)建一系列相關(guān)或依賴對象的族系列,而無需指定實(shí)際創(chuàng)建的具體類。在本文中,我們通過一個(gè)具體的例子,詳細(xì)介紹了 Python 抽象工廠模式的使用方法,包括定義抽象工廠、具體工廠和具體產(chǎn)品類的步驟。希望本文能幫助讀者更好地理解 Python 抽象工廠模式,并應(yīng)用到實(shí)際開發(fā)中。