工厂方法模式

Posted zcfx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂方法模式相关的知识,希望对你有一定的参考价值。

一、内容

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

二、角色

  • 抽象工厂角色(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元

 

以上是关于工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章

iOS经常使用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

工厂设计模式

Java设计模式3:工厂方法模式

简单工厂工厂方法抽象工厂区别

设计模式之工厂方法模式

简单工厂方法,工厂模式,抽象工厂模式