一分钟了解python的抽象工厂
Python 抽象工厂模式是一种常用的设计模式,它主要的作用是提供一个接口来创建一系列相关或依赖对象的族系列,而无需指定实际创建的具体类。如果我们需要改变对象的类型,可以只需改变抽象工厂所创建的具体对象,而不必修改任何其他代码。在本文中,我们将通过一个例子来详细讲解 Python 抽象工厂模式的用法。
示例背景
假设我们正在开发一个商城系统,该系统要求支持多种支付方式,如现金、信用卡、支付宝和微信支付等。我们需要实现一个抽象工厂来创建不同类型的支付方式。
定义抽象工厂
首先,我们需要定义一个抽象工厂接口,该接口定义了创建不同支付方式的方法,包括 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 装饰器用于指定该方法为抽象方法,子类必须实现该方法。
定义具体工厂类
接下来,我们需要定义具体的工厂类,例如现金支付工厂、信用卡支付工厂等等,这些工厂类都需要继承自 PaymentFactory 抽象工厂,并实现 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()
定义具体产品类
然后,我们需要定义具体的产品类,包括现金支付、信用卡支付、支付宝和微信支付等。这些产品类都需要实现相应的方法,例如:
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.")
使用抽象工厂
现在,我们可以在主程序中使用具体的工厂类来创建不同类型的支付方式,例如:
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.
通过使用抽象工厂模式,我们成功创建了不同类型的支付方式对象,而不需要直接实例化 CashPay、CreditPay、Alipay 或 WechatPay 类。在创建对象的过程中,我们只需要使用具体的工厂类来创建相应的产品对象,从而实现了对象的解耦。这种方式非常方便,因为我们可以轻松添加新的支付方式,只需要实现相应的具体产品类和工厂类,而不需要修改主程序代码。这样,我们的代码也更加具有可维护性。
总结
Python 抽象工厂模式是一种常见的设计模式,用于提供一个接口来创建一系列相关或依赖对象的族系列,而无需指定实际创建的具体类。在本文中,我们通过一个具体的例子,详细介绍了 Python 抽象工厂模式的使用方法,包括定义抽象工厂、具体工厂和具体产品类的步骤。希望本文能帮助读者更好地理解 Python 抽象工厂模式,并应用到实际开发中。