0
点赞
收藏
分享

微信扫一扫

Python简单工厂模式(超详细)

肉肉七七 2022-04-01 阅读 24

内容:
不直接向客户端暴露创建对象的细节,而是通过一个工厂类来负责
创建产品类的实例。
角色:
工厂角色、抽象产品角色、具体产品角色
优点:
1.隐藏了对象创建的具体细节
2.客户端不需要修改代码
缺点:
1.违反了单一职责原则,将创建逻辑集中到了一个工厂类里
2.当添加新产品时,需要修改工厂类代码,违反了开闭原则

from abc import ABCMeta, abstractmethod


# 抽象产品角色
class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass


# 具体产品角色
class AliPay(Payment):
    def pay(self, money):
        print("支付宝支付%d元" % money)


class WechatPay(Payment):
    def pay(self, money):
        print("微信支付%d元" % money)


# 工厂角色
class CreatePayment:
    @classmethod
    def create_payment(cls, name):
        if name == "ali":
            return AliPay()
        elif name == "wechat":
            return WechatPay()
        else:
            raise TypeError("No such payment named %s." % name)


# 客户端调用
p = CreatePayment()
payment = p.create_payment('wechat')
payment.pay(100)

订阅专栏,每天学习不同的设计模式~

举报

相关推荐

0 条评论