zoukankan      html  css  js  c++  java
  • 工厂方法模式

    一、内容

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

    二、角色

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

    工厂方法模式相比简单工厂模式将每个具体产品都对应一个具体工厂

    三、优点

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

    四、缺点

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

    五、使用场景

    • 需要生产多种、大量复杂对象的时候
    • 需要降低耦合度的时候
    • 当系统的产品种类需要经常扩展的时候  

    六、代码示例

    from abc import ABCMeta,abstractmethod
    class PaymentFactory(metaclass=ABCMeta):
        @abstractmethod
        def create_payment(self):
            pass
    
    class Payment(metaclass=ABCMeta):
        @abstractmethod
        def pay(self,money):
            pass
    
    class Alipay(Payment):
        def pay(self, money):
            print('支付宝支付了%s元'%money)
    
    class Applepay(Payment):
        def pay(self, money):
            print('微信支付了%s元' %money)
    
    class AlipayFactory(PaymentFactory):
        def create_payment(self):
            return Alipay()
    
    class AppleFactory(PaymentFactory):
        def create_payment(self):
            return Applepay()
    
    apple = AppleFactory()
    apple.create_payment().pay(100)
    
    alipay = AlipayFactory()
    alipay.create_payment().pay(300)
    
    #输出
    # 微信支付了100元
    # 支付宝支付了300元
  • 相关阅读:
    js json与字符串相互转换
    Web 加入favicon
    JS 深拷贝
    C# 读取配置文件
    设计模式之抽象工厂模式
    设计模式之工厂方法的隐藏
    设计模式之工厂方法的重载
    设计模式之工厂方法配置文件与反射
    C#设计模式之工厂方法模式
    jq解析json文件
  • 原文地址:https://www.cnblogs.com/morgana/p/8496247.html
Copyright © 2011-2022 走看看