设计模式简单叙述
本文介绍设计模式的种类,以及简单应用场景
1.创建型模式
- 解决“对象怎么创建”的问题
- 关注点:对象应该由谁创建、在哪里创建、怎么创建
工厂模式
根据条件创建不同的对象,把创建对象的逻辑集中到一个地方
适合场景:根据不同类型创建不同实现类抽象工厂
创建一组相关对象,而不是只创建单个对象
适合场景:同一套产品族需要一起切换,例如不同数据库、不同平台组件单例模式
全局只创建一个对象,所有地方都使用同一个实例
适合场景:配置对象、日志对象、数据库连接池建造者模式
一步一步构建复杂对象,避免构造函数参数过多
适合场景:创建复杂配置、复杂请求参数、复杂报告对象外观模式
对外提供一个简单入口,隐藏内部复杂流程
适合场景:一个操作内部要调用多个模块,但外部只想调用一个方法原型模式
复制已有对象创建新对象,而不是重新从零创建
适合场景:对象创建成本高,或者需要基于已有对象快速生成新对象2.结构型模式
- 解决“对象之间怎么组合”的问题
- 关注点:如果把多个对象组织成更好用的结构
适配器模式
把不同接口统一成系统所需要的接口
适合场景:日志增强、权限校验、缓存增强、统计耗时装饰器模式
不修改原对象代码,给对象额外增加功能
适合场景:日志增强、权限校验、缓存增强、统计耗时代理模式
通过代理对象控制真实对象的范围
适合场景:一个操作内部要调用多个模块,但外部只想调用一个方法桥接模式
把抽象和具体实现分开,让他它们可以独立变化
适合场景:多个维度同时变化,例如平台和消息类型都可能变化组合模式
把单个对象和组合对象统一方式处理
适合场景:菜单树、组织架构、文件夹和文件这种树形结构享元模式
复用大量相似对象,减少内存占用
适合场景:大量重复对象,例如支付、图标、缓存对象3.行为型模式
- 解决“对象之间怎么样协助”的问题
- 关注点:对象之间如何通信、如何分工、如何执行流程
策略模式
把不同算法或者不同处理方式封装起来,运行时选择其中一种
适合场景:不同的支付方式、不同的计费规则、不同数据源处理规则观察者模式
一个对象状态变化时,自动通知其他对象
适合场景:事件通知、消息订阅、前端进度推送责任链模式
多个处理器按顺序处理请求,每一个处理器只复杂自己的部分
适合场景:审批流程、过滤器、数据处理流水线模版方法模式
父类定义固定流程,子类实现具体步骤
适合场景:流程固定,但某些步骤需要不同实现命令模式
把一次操作封装成一个命令对象
适合场景:任务队列、撤销重做、异步执行状态模式
对象在不同状态下有不同的行为
适合场景:订单状态、任务状态、审批状态流转迭代器模式
提供统一方式便利集合,不暴露集合内部结构
适合场景:遍历列表、树、分页数据中介者模式
用一个中介对象协调多个对象之间的互相交互
适合场景:多个模块互相依赖,关系复杂,需要集中协调备忘录模式
保存对象某个时刻的状态,后续可以恢复
适合场景:撤销操作、草稿保存、流程checkpoint访问者模式
把操作对象结构中拆出来,新增操作时不改变对象本身
适合场景:对一组固定结构做多种不同处理解释器模式
定义一套语法规则,并解析执行
适合场景:规则引擎、表达式解析、简单脚本语言4.项目常见补充思想
依赖注入
对象不自己创建依赖,而是外部传入依赖
适合场景:方便替换实现、方便测试、降低模块耦合面向接口编程
调用反依赖接口或协议,不直接依赖具体实现类
适合场景:同一能力有多个实现,例如多个数据源、多个支付渠道回调模式
把函数作为参数传入,执行到某个时机再调用这个函数
适合场景:进度通知、事件处理、异步结果返回版权所有
版权归属:念宇
