重学设计模式
参考
Lu多年总结&实践 (opens new window)
小傅哥の码场 (opens new window)
小傅哥博客 (opens new window)
小傅哥案例源码 (opens new window)
创建型模式
结构型模式
- 适配器模式
- 前后端统一的返回参数处理
- 将上层不同的数据结构,通过适配器,转换成统一的数据结构
- 桥接模式
- 组合模式
- 装饰器模式
- 门面模式
- 接口白名单
- 屏蔽复杂的实现,封装成职责单一且简单的方法,对外提供服务
- 享元模式
- 秒杀场景的优化:多几缓存架构,缓解db系统单点问题
- 以解决程序性能为主,减少对象的创建数量,共享通用对象,减少内存的使用,提升系统的访问效率,例如:共享数据
- 代理模式
- spring aop编程、mybatis
- 包装执行过程,可以对原有的接口包装增强,也可以是拦截等
行为型模式
- 责任链模式
- 审批流程 (opens new window),拦截链过滤链
- 避免一个请求,被多个处理者接收处理(这样耦合性太强),采用这一模式,将所有的请求处理者,通过前一个处理者记住下一个处理者(引用)的方式,将所有的处理者,按照优先级连成一条链,直到各个处理者处理返回,或者链路走完为止。层层递进。
- 命令模式
- 迭代器模式
- java迭代器实现、遍历组织架构树、遍历决策树...
- 以相同的调用方式,遍历不同的数据结构(list、map、树...),切合一些算法,按照不同的规则遍历,而上层调用不管关系遍历逻辑的具体实现
- 中介者模式
Mysql、oracle、sqlserver => orm => 应用层这里mybatis 等orm框架就是联系数据库与应用层的中介,其中可以做一些重复的复杂的事情 - 中台系统也是一个中介,将底层复杂子系统的功能统一包装,提供外部接口能力
- 备忘录模式
- 观察者模式
- 状态模式
- 活动的审批过程 (opens new window)
- 活动过程:查看 -> 编辑 -> 提审 -> 撤审 -> 通过 -> 拒绝 -> 关闭 -> 开启
- 活动审批这个过程,提审阶段:提交申请单,下个状态要么是通过,要么是拒绝,不能直接关闭,而且待审核状态也不能重复提审
- 电梯运行过程 (opens new window)
- 磁带放音机
- 按不同的安装,放音机的有不同的状态变化,例如:下一首、快进、声音变大,但是有些按钮不能同时按,例如同时按快进和快退。
- 一个行为下,多种状态的变更,不同的行为,所支持的状态表更不同
- 策略模式
- 模版模式
- 分布式事务实现(2PC) (opens new window)
- 一阶段执行各个本地事务逻辑,二阶段,当所有本地事务都提交成功,则方法返回成功;当存在失败,则回滚已经成功的本地事务。这就可以构造成一个调度模版。
- 将一类方法通用的调度模式提取出来形成一个模版,模版里调用各个子方法的具体实现(类似于一个,调度模版)
- 访问者模式