面向对象-02工厂方法模式
工厂方法模式
-
内容:
- 定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个产品类。
-
角色:
- 抽象工厂角色(Creator)
- 具体工厂角色(Concrete Creator)
- 抽象产品角色(Product)
- 具体产品角色(Concrete Product)
-
优点:
- 每个具体产品都对应一个具体工厂类,不需要修改工厂类代码
- 隐藏了对象创建的实现细节
-
缺点:
- 每增加一个具体产品类,就必须增加一个相应的具体工厂类

实例:
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, user_huabei=False):
self.huabei = user_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 Factory(metaclass=ABCMeta):
@abstractmethod
def create_factory(self):
pass
# 拆分工厂,单独实现
# 具体工厂角色(Concrete Creator)
class AlipayFactory(Factory):
def create_factory(self):
return Alipay()
# 具体工厂角色(Concrete Creator)
class HuaBeiFactory(Factory):
def create_factory(self):
return Alipay(user_huabei=True)
# 具体工厂角色(Concrete Creator)
class WeChatFactory(Factory):
def create_factory(self):
return WeChatPay()
# 高层代码,不需要知道底层逻辑,底层添加功能也不会影响到其他的功能,隐藏底层逻辑,同时也实现单一职责原则,开放封闭原则
pf = AlipayFactory()
f = pf.create_factory()
f.pay(100)

浙公网安备 33010602011771号