面向对象-02工厂方法模式

工厂方法模式

  • 内容:

    • 定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个产品类。
  • 角色:

    • 抽象工厂角色(Creator)
    • 具体工厂角色(Concrete Creator)
    • 抽象产品角色(Product)
    • 具体产品角色(Concrete Product)
  • 优点:

    • 每个具体产品都对应一个具体工厂类,不需要修改工厂类代码
    • 隐藏了对象创建的实现细节
  • 缺点:

    • 每增加一个具体产品类,就必须增加一个相应的具体工厂类

image

实例:

from abc import ABCMeta, abstractmethod


# 创建型模式(5种)︰(主要聚焦在如何创建对象,隐藏底层模块逻辑。)


# 底层逻辑
# 抽象产品角色(Product)
class Payment(metaclass=ABCMeta):

    @abstractmethod
    def pay(self, money):
        pass


# 具本产品角色(Concrete Product)
class Alipay(Payment):

    def __init__(self, user_huabei=False):
        self.huabei = user_huabei

    def pay(self, money):
        if self.huabei:
            print("alipay use huabei:%d" % money)
        else:
            print("alipay:%d" % money)


# 具本产品角色(Concrete Product)
class WeChatPay(Payment):

    def pay(self, money):
        print("WeChatPay:%d" % money)


# 限制创建工厂类
# 抽象工厂角色(Creator)
class Factory(metaclass=ABCMeta):

    @abstractmethod
    def create_factory(self):
        pass


# 拆分工厂,单独实现
# 具体工厂角色(Concrete Creator)
class AlipayFactory(Factory):

    def create_factory(self):
        return Alipay()


# 具体工厂角色(Concrete Creator)
class HuaBeiFactory(Factory):

    def create_factory(self):
        return Alipay(user_huabei=True)


# 具体工厂角色(Concrete Creator)
class WeChatFactory(Factory):

    def create_factory(self):
        return WeChatPay()


# 高层代码,不需要知道底层逻辑,底层添加功能也不会影响到其他的功能,隐藏底层逻辑,同时也实现单一职责原则,开放封闭原则
pf = AlipayFactory()
f = pf.create_factory()
f.pay(100)

posted @ 2022-06-10 10:53  Redskaber  阅读(22)  评论(0)    收藏  举报