设计模式

设计模式

创建型模式(工厂/单例)
工厂模式(Factory):解决对象创建问题

解决对象创建问题
解耦对象的创建和使用
包括工厂方法和抽象工厂

构造模式(Builder):控制复杂对象的创建
用来控制复杂对象的构造
创建和表示分离。比如你要买电脑,工厂模式直接给你需要的电脑
但是构造模式允许你自己定义电脑的配置,组装完成后给你

原型模式(Prototype):通过原型的克隆创建新的实例(无代码演示)
可以使用相同的原型,通过修改部分属性来创建新的实例
用途:对于一些创建实例开销比较高的地方可以用原型模式

单例(Borg/Singleton):一个类只能创建同一个对象(非常重要)
python的模块其实就是单例的,只会导入一次
使用共享同一个实例的方式来创建单例模式
class Singleton:
def __new__(cls,*args,**kwargs):
if not hasattr(cls, '_instance'):
_instance = super().__new__(cls,*args,**kwargs)
cls._instance = _instance
return cls._instance

class MyClass(Singleton):
pass


c1 = MyClass()
c2 = Myclass()
assert c1 is c2

对象池模式(Pool):预先分配同一类型的一组实例
惰性计算模式(Lazy Evaluation):延迟计算(python的property)

结构型模式
装饰器模式:无需子类化扩展对象功能

代理模式:把一个对象的操作代理到另一个对象
Stack/Queue,把操作代理到deque
通常使用has-a组合关系

适配器模式:通过一个间接层适配统一接口
想象一个多功能充电头,可以给不同的电器充电,充当了适配器
当我们需要给不同的对象统一接口的时候可以使用适配器模式

外观模式:简化复杂对象的访问问题
享元模式:通过对象复用(池)改善资源利用,例如连接池
MVC:解耦展示逻辑和业务逻辑

行为型模式
迭代器模式:通过统一的接口迭代对象
python内置对迭代器模式的支持
可以用for遍历各种Iterable的数据类型
python里可以实现__next__和__iter__实现迭代器

观察者模式:对象发生改变的时候,观察者执行相应动作
发布订阅是一种最常见的实现方式
发布订阅用于解耦逻辑
可以通过回调等方式实现,当发生事件时,调用响应的回调函数

策略模式:针对不同规模输入使用不同的策略
比如买东西超过10个打八折,超过20个打七折
对外暴露统一的接口,内部采用不同的策略计算

原文地址:https://www.cnblogs.com/muzinan110/p/11149187.html