Lu多年总结&实践

小傅哥の码场

小傅哥博客

小傅哥案例源码

创建型模式

  • 工厂、抽象工厂、建造者、原型、单例

结构型模式

  • 适配器模式
    • 前后端统一的返回参数处理
    • 将上层不同的数据结构,通过适配器,转换成统一的数据结构
  • 桥接模式
    • 聚合平台、资源整合,例如聚合支付平台(支付渠道+支付方式实现)
    • 将抽象与实现分离,通过产生联系
  • 组合模式
    • 决策树、规则引擎
    • 将服务各个节点自由组合对外提供服务 (组合成一组可以被调用的结构树)
  • 装饰器模式
    • 在原有逻辑不变的情况下,对对象的增强
  • 门面模式
    • 接口白名单
    • 屏蔽复杂的实现,封装成职责单一且简单的方法,对外提供服务
  • 享元模式
    • 秒杀场景的优化:多几缓存架构,缓解db系统单点问题
    • 以解决程序性能为主,减少对象的创建数量,共享通用对象,减少内存的使用,提升系统的访问效率,例如:共享数据
  • 代理模式
    • spring aop编程、mybatis
    • 包装执行过程,可以对原有的接口包装增强,也可以是拦截等

行为型模式

  • 责任链模式
    • 审批流程,拦截链过滤链
    • 避免一个请求,被多个处理者接收处理(这样耦合性太强),采用这一模式,将所有的请求处理者,通过前一个处理者记住下一个处理者(引用)的方式,将所有的处理者,按照优先级连成一条链,直到各个处理者处理返回,或者链路走完为止。层层递进。
  • 命令模式
    • 计算器、项目经理协调资源开展工作、JdbcTemplate StatementCallback
    • 将抽象的命令与命令背后具体的实现相分离,通过调度者去协调,完成一件事情。
  • 迭代器模式
    • java迭代器实现、遍历组织架构树、遍历决策树…
    • 以相同的调用方式,遍历不同的数据结构(list、map、树…),切合一些算法,按照不同的规则遍历,而上层调用不管关系遍历逻辑的具体实现
  • 中介者模式
    • Mysql、oracle、sqlserver => orm => 应用层这里mybatis 等orm框架就是联系数据库与应用层的中介,其中可以做一些重复的复杂的事情
    • 中台系统也是一个中介,将底层复杂子系统的功能统一包装,提供外部接口能力
  • 备忘录模式
  • 观察者模式
    • 消息订阅系统、jvm提供的观察者机制
    • 当一个行为发生时,将该事件,传递给关注他的用户,事件驱动。
  • 状态模式
    • 活动的审批过程
      • 活动过程:查看 -> 编辑 -> 提审 -> 撤审 -> 通过 -> 拒绝 -> 关闭 -> 开启
      • 活动审批这个过程,提审阶段:提交申请单,下个状态要么是通过,要么是拒绝,不能直接关闭,而且待审核状态也不能重复提审
    • 电梯运行过程
    • 磁带放音机
      • 按不同的安装,放音机的有不同的状态变化,例如:下一首、快进、声音变大,但是有些按钮不能同时按,例如同时按快进和快退。
    • 一个行为下,多种状态的变更,不同的行为,所支持的状态表更不同
  • 策略模式
    • 优惠折扣发放(满减、直减、折扣、n元购)、发送消息(短信、彩信、邮件)、支付方式(密码支付、指纹支付、人脸识别)
    • 可以替换大量的ifelse,一个行为产生了,选择什么样的策略去应对,将各个应对策略的实现分离开来,至于调度问题,可以采用map k v的形式或者反射的形式处理
  • 模版模式
    • 分布式事务实现(2PC)
      • 一阶段执行各个本地事务逻辑,二阶段,当所有本地事务都提交成功,则方法返回成功;当存在失败,则回滚已经成功的本地事务。这就可以构造成一个调度模版。
    • 将一类方法通用的调度模式提取出来形成一个模版,模版里调用各个子方法的具体实现(类似于一个,调度模版)
  • 访问者模式
    • 数据报表、大数据等场景
    • 在一个稳定的数据结构下,通过聚合、转换、数据清洗等,增加易变的访问逻辑