Python中如何实现工厂方法设计模式?
- 内容介绍
- 文章标签
- 相关推荐
本文共计562个文字,预计阅读时间需要3分钟。
增加信息参考,[设计模式] 工厂方法模式含义,定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个类。决定哪个产品类实例化的是子类,工厂方法模式中包含了角色:创建者(Creator)、具体创建者(ConcreteCreator)、产品(Product)、具体产品(ConcreteProduct)。
更多信息请参考
工厂方法模式含义
定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪个产品类
工厂方法模式中的角色
- 抽象工厂角色(Creator)
- 具体工厂角色(Concrete Creator)
- 抽象产品角色(Product)
- 具体产品角色(Concrete Product)
工厂方法模式与简单工厂模式的区别
- 简单工厂模式只有一个工厂类,这一个工厂类可以生产出不同产品的实例
- 工厂方法模式是每个产品都有一个工厂类,每个产品额实例都由各自独立的工厂类生产出来
优点
- 每个具体产品都对应一个具体工厂类,不需要修改工厂类代码
- 隐藏了对象创建的细节
缺点
- 每增加一个具体产品类,就必须增加一个相应的具体工厂类
- 代码量过多
工厂方法模式实例
代码实现如下:
import abcclass Payment(metaclass=abc.ABCMeta):
@abc.abstractmethod
def pay(self,money):
pass
class Alipay(Payment):
def pay(self,money):
print(f"pay {money} in alipay way....")
class WeChatPay(Payment):
def pay(self,money):
print(f"pay {money} in wechat pay way...")
class PaymentFactory(metaclass=abc.ABCMeta):
@abc.abstractmethod
def create_payment(self):
pass
class AlipayFactory(PaymentFactory):
def create_payment(self):
return Alipay()
class WechatFactory(PaymentFactory):
def create_payment(self):
return WeChatPay()
if __name__=="__main__":
pf=AlipayFactory()
p=pf.create_payment()
p.pay(300)
执行结果如下:
本文共计562个文字,预计阅读时间需要3分钟。
增加信息参考,[设计模式] 工厂方法模式含义,定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个类。决定哪个产品类实例化的是子类,工厂方法模式中包含了角色:创建者(Creator)、具体创建者(ConcreteCreator)、产品(Product)、具体产品(ConcreteProduct)。
更多信息请参考
工厂方法模式含义
定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪个产品类
工厂方法模式中的角色
- 抽象工厂角色(Creator)
- 具体工厂角色(Concrete Creator)
- 抽象产品角色(Product)
- 具体产品角色(Concrete Product)
工厂方法模式与简单工厂模式的区别
- 简单工厂模式只有一个工厂类,这一个工厂类可以生产出不同产品的实例
- 工厂方法模式是每个产品都有一个工厂类,每个产品额实例都由各自独立的工厂类生产出来
优点
- 每个具体产品都对应一个具体工厂类,不需要修改工厂类代码
- 隐藏了对象创建的细节
缺点
- 每增加一个具体产品类,就必须增加一个相应的具体工厂类
- 代码量过多
工厂方法模式实例
代码实现如下:
import abcclass Payment(metaclass=abc.ABCMeta):
@abc.abstractmethod
def pay(self,money):
pass
class Alipay(Payment):
def pay(self,money):
print(f"pay {money} in alipay way....")
class WeChatPay(Payment):
def pay(self,money):
print(f"pay {money} in wechat pay way...")
class PaymentFactory(metaclass=abc.ABCMeta):
@abc.abstractmethod
def create_payment(self):
pass
class AlipayFactory(PaymentFactory):
def create_payment(self):
return Alipay()
class WechatFactory(PaymentFactory):
def create_payment(self):
return WeChatPay()
if __name__=="__main__":
pf=AlipayFactory()
p=pf.create_payment()
p.pay(300)
执行结果如下:

