面向对象-01简单工厂模式

简单工厂模式

  • 内容:

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

    • 工厂角色( 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, use_huabei=False):
        self.huabei = use_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 PayFactory:

    # 隐藏底层逻辑
    def createPay(self, method):
        if method == "alipay":
            return Alipay()
        elif method == "WeChatPay":
            return WeChatPay()
        elif method == "huabei":
            return Alipay(use_huabei=True)
        else:
            raise TypeError("Not a method: %s" % method)


# client
# 高层代码
p = PayFactory()
o = p.createPay(method='huabei')
o.pay(100)
posted @ 2022-06-10 10:48  Redskaber  阅读(15)  评论(0)    收藏  举报