创建型设计模式
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
0_简单设计模式
内容: 不直接向客户端 (高层代码,指调用底层代码的用户)暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例;
角色:
工厂角色(creator)
抽象产品角色(product): 是指抽象的 接口 类; 作用: 使得 调用所有具体产品时, 方法都一样; 统一了 使用方法;
具体产品角色: 具体产品: 各个具体的类; # 一、pandas是什么?
二、举例
1.底层代码
from abc import ABCMeta, abstractmethod
class Payment(metaclass= ABCMeta ):
# abstract class
@abstractmethod
def pay(self, money):
pass
class Alipay(Payment):
def __init__(self, use_huabei = False):
self.use_huabei = use_huabei
def pay(self, money):
if self.use_huabei:
print("huabei paid : %d RMB" % money)
else:
print("Alipay paid: %d RMB" % money)
class WechatPay(Payment):
def pay(self, money):
print("Wechat paid: %d RMB" % money)
class PaymentFactory:
def create_payment(self, method):
if method == "alipay":
return Alipay()
elif method == " wechat":
return WechatPay()
elif method == "huabei":
return Alipay(use_huabei= True )
else:
raise TypeError("No such payment named: %s " % method )
2.客户端代码
# client use
pf= PaymentFactory()
p = pf.create_payment('alipay')
p.pay(1000)
总结
优点:
1.隐藏对象创建的实现细节;
2.高层代码端 ,无需修改代码;
缺点:
1.违反了单一职责原则, 将创建了 多个逻辑 到一个工厂类里;
2.当添加新的产品类时, 需要修改工厂类的代码, 违反开闭原则;