面向对象-01简单工厂模式
简单工厂模式
-
内容:
- 不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。
-
角色:
- 工厂角色( 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, use_huabei=False):
self.huabei = use_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 PayFactory:
# 隐藏底层逻辑
def createPay(self, method):
if method == "alipay":
return Alipay()
elif method == "WeChatPay":
return WeChatPay()
elif method == "huabei":
return Alipay(use_huabei=True)
else:
raise TypeError("Not a method: %s" % method)
# client
# 高层代码
p = PayFactory()
o = p.createPay(method='huabei')
o.pay(100)

浙公网安备 33010602011771号