更多信息请参考 【设计模式】 工厂方法模式含义 定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪个产品类 工厂方法模式中的角色 抽象工厂角色(Creator) 具体工厂角
更多信息请参考 【设计模式】
工厂方法模式含义
定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪个产品类
工厂方法模式中的角色
- 抽象工厂角色(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)
执行结果如下:
pay 300 in alipay way....