设计模式:简单工厂模式

发布时间 2023-12-13 23:48:44作者: 仗剑天涯横刀笑

简单工厂模式

不直接向客户端暴露对象创建的实现细节,而通过一个工厂类来负责创建产品类的实例。

简单工厂模式的组成:

  1. 抽象产品(Abstract Product): 定义产品的接口,在这个例子中是 Payment 类。
  2. 具体产品(Concrete Product): 实现抽象产品接口的类,在这个例子中是 AlipayWechatPay
  3. 工厂(Factory): 一个负责创建具体产品实例的类,在这个例子中是 PaymentFactory
from abc import ABCMeta, abstractmethod


# Payment类是一个抽象产品角色,定义了支付方式的接口 pay。
class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass


# 具体产品角色,实现了Payment类的支付宝支付方式即pay方法。
class Alipay(Payment):
    def __init__(self, use_huabei=False):
        self.use_huabei = use_huabei


    def pay(self, money):
        if self.use_huabei:
            print("花呗支付%d元。" % money)
        else:
            print("支付宝余额支付了%d元。" % money)

# 具体产品角色,实现了Payment类的微信支付方式即pay方法。
class WechatPay(Payment):
    def pay(self, money):
        print("微信支付了%d元." % money)


# PaymentFactory 是工厂 Factory 类角色 - 负责根据条件创建具体的支付方式 实例
class PaymentFactory:
    def create_payment(self, method):
        if method == "Alipay":
            return Alipay()
        elif method == "WechatPay":
            return WechatPay()
        elif method == "HuabeiPay":
            return Alipay(use_huabei=True)
        else:
            raise TypeError(f"No such payment named {method}")

            
# Client -- 客户端调用 - 示范了如何使用工厂类来获取和使用支付方式实例
pf = PaymentFactory() # 创建PaymentFactory类实例并将其赋值给pf变量
# PaymentFactory 类通过 create_payment 方法根据传入的方法名称来决定创建哪种支付方式的实例
p = pf.create_payment("HuabeiPay")
p.pay(199)

示例代码解析

  • Payment 类是一个抽象产品,定义了支付的接口 pay
  • AlipayWechatPay 是具体产品,它们实现了 Payment 类的 pay 方法。
  • PaymentFactory 是工厂类,负责根据不同的条件(这里是支付方式的名称)来创建并返回具体的产品实例。