16种python设计模式使用场景、特点简述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youzi_yun/article/details/81160694

++设计模式是在已有的方案之上发现更好的方案,而不是全新发明,不要为了强迫自己使用已有的设计模式而限制了你的创造力++


创建型模式

处理对象创建相关问题

1 工厂模式

1.1 工厂方法

==一个函数==,对不同的输入参数返回不同的对象
- 集中在一个地方创建对象,方便对对象的追踪
- 解耦创建对象-使用对象
- 在必要时才创建新对象,提高性能和内存使用率

1.2 抽象工厂

同属于==单个类==的许多工厂方法用于创建==一系列==种类的相关对象,每个工厂方法负责生产不同种类的对象

2 建造者模式

  • 想要创建一个由多个部分构成的对象,而且它的构成需要一步接一步完成,只有每个部分都创建好,这个对象才是完整的。
  • 当这个构造过程可以产生不同的表现,就可以试用建造者模式。
  • 与工厂模式的区别:工厂模式以单个步骤创建对象,建造者模式以多个步骤创建对象;工厂模式会立刻返回一个创建好的对象,建造者模式仅在需要时才显示地请求指挥者返回最终的对象。

与工厂模式相比,以下情况建造者模式更好:
- 创建一个复杂对象(对象由多个部分构成,且对象的创建要经过多个不同的步骤,这些步骤也许还要遵从特定的顺序)
- 要求一个对象能有不同的表现,且对象的构建与表现解耦
- 想要在某个时间点创建对象,但是在稍后的时间点再访问

3 原型模式

用于创建对象的完全副本
- copy.copy() 创建浅副本,副本依赖引用
- copy.deepcopy() 创建深副本,副本复制所有东西,此时需要关注因对象克隆而引入的资源耗用问题。


机构型模式

4 适配器模式

  • 处理一个系统中的不同实体之间的关系,关注的是提供一种简单的对象组合来创造新功能。
  • 比如:使用该模式让多个接口兼容。

5 修饰器模式

  • 与继承相比,通常应该优选组合,因为继承会使代码更难复用。
  • python装饰器比修饰器模式能做的更多,其中之一就是实现修饰器模式。
  • 比如:使用装饰器来扩展一个对象的行为

6 外观模式

  • 有助于隐藏系统内部的复杂性,并通过一个简易的接口向客户端暴露必要的部分。
  • 外观封装内部系统

7 享元模式

  • 通常为相似对象引入数据共享来最小化内存使用,提示性能。
  • 旨在优化性能和内存使用。
  • 关注的是共享对象数据
  • 一般来说,在应用需要创建大量的计算代价但共享许多属性的对象时,可以使用享元模式,重点在于将不可变(可共享)的属性与可变的属性区别开

8 模型-视图-控制器模式 MVC模式

关注点分离 SoC Separation of Concerns 原则
- 中心思想是:将一个应用切分成不同的部分,每个部分解决一个单独的关注点
- 分层设计中的层次(数据访问层,业务逻辑层,表示层等)即是关注点

模型、视图、控制器
- 模型负责访问数据,管理应用的状态
- 视图是模型的外在表现,视图并非必须是图形化的,文本输出也可以
- 控制器是模型与视图之间的连接

9 代理模式

在访问某个对象之前执行一个或多个重要的操作,比如ORM是关系型数据库的代理
四种代理模式如下:
- 远程代理:代表一个活跃于远程位置(例如远程服务器或云服务)的对象
- 虚拟代理:讲一个对象的初始化延迟到真正需要时使用
- 保护/防护代理:用于对处理敏感信息的对象进行访问控制
- 智能/引用代理:通过添加帮助信息(比如引用计数)来扩展一个对象的行为


行为模式

10 责任链模式

  • 责任链模式用于让多个对象来处理单个请求时,或者用于预先不知道应该由哪个对象来处理某个特性请求时。
  • 发送方可以直接访问链中的首个节点。若首个节点不能处理请求,则转发给下一个节点,直到请求被某个节点处理或者整个链遍历结束
  • 可以实现发送发与多个接收方之间的解耦

原则:
- 存在一个对象链(链表,树或者任何其他便捷的数据结构)
- 一开始将请求发送给链中的第一个对象
- 对象决定其是否处理该请求
- 对象将请求转发给下一个对象
- 重复该过程,指导达到链尾

11 命令模式

  • 将一个操作封装成一个对象
  • 调用命令的对象与执行命令的对象解耦

12 解释器模式

13 观察者模式

14 状态模式

15 策略模式

16 模板模式

猜你喜欢

转载自blog.csdn.net/youzi_yun/article/details/81160694