当前位置: 首页 > news >正文

设计模式相关知识

  • 核心思想
    • 识别代码中稳定的部分和变化的部分,然后通过抽象、封装等手段,将变化隔离出去,从而达到整体的稳定
  • 六大原则
    • 单一职责
    • 开发封闭
    • 里氏替换原则
    • 接口隔离
    • 依赖倒转
    • 迪米特法则
  • 创建
    • 工厂模式
      • 问题
        • 构造器表现力不足
        • 无法干预创造过程
        • new对象过于依赖具体对象
      • 核心思想:将对象的创建和使用分开
      • 简单工厂模式
        • 静态工厂方法:利用静态方法实现函数抽象
      • 工厂方法模式
        • 配置文件+反射-执行具体创造方法
          • 典型案例:factoryBean
      • 抽象工厂模式
        • 多个抽象方法的工厂方法
    • 建造模式
      • 核心思想:使一个复杂对象的构造和表示分开,相同构造过程可以创建不同表示
    • 原型模式
      • 复制
  • 性能
    • 单例模式
      • 饿汉式
      • 懒汉式
      • 锁-懒汉式
      • 双重检测式-懒汉式
      • 静态内部类
      • 枚举
    • 享元模式
      • 共享
  • 组件协作
    • 模板模式
      • 继承典型,简单来说就是将相同的代码放在父类,有差异变化的抽象到子类实现
    • 策略模式
      • 将算法独立化,代码可随意替换算法
      • 典型:Comparable和Comparator
    • 观察者模式
      • 当一个对象发生变化时,通知依赖于他所有的对象
  • 数据结构
    • 迭代器模式
      • 保护聚合数据内部结构,提供简单方法给外部调用内部数据
      • 经典案例:Iterator和Iterable
        • 为什么不直接实现Iterator?
          • 如果arrayList等直接实现,那么不满足单一职责,具有容器相关的操作及遍历功能
    • 组合模式
      • 将对象的组合模式变成部分-整体,CompositePattern使得用户对单个对象和组合对象的使用具有一致性
    • 责任链模式
      • 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止
      • 实现方式
        • 数组+下标记录
        • 链表方式+每个Filter内部记录着下一个Filter
        • 问题:多个业务都需要操作FilterChain时,会导致Filter下个列表添加到另一个业务的Filter
        • 解决方案:Filter只做过滤,FilterChain做过滤和管理,内部新建一个类,每次添加Filter时,包装到此类,防止其他业务交替使用
      • 不纯的责任链模式:可以将责任推给下一家且可以最终可以没有人接手。
        • 实现方式:函数式接口
  • 单一职责
    • 装饰者模式
      • 不改变原先的类,增强其额外的功能。说白了就是写一个增强类
      • 实现一个接口并且引进一个实现接口的实例
  • 接口隔离
    • 外观模式
      • 将复杂的系统封装成简单的调用,方便外部系统调用
    • 中介者模式
      • 将系统之间多个对象的交互调用集中到一起
    • 代理模式
      • 为其它对象提供一种代理以控制对这个对象的访问
      • 静态代理
        • 通过接口继承的方式,类似装饰者模式
      • 动态代理
        • JDK动态代理
          • 目标接口+Proxy.newProxyInstance
            • 本质:在运行时创建$Proxy0对象增强类,运行时的产物
        • CGLib代理
          • 实现接口MethodInterceptor+Enhancer
    • 适配器模式
      • 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
      • 典型:FutureTask和Runnable,RunnableAdapter
  • 行为变化
    • 命令模式
      • 将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,并支持可撤销的操作。
      • 典型:继承Thread方法实现run方法 ->实现Runnable接口传入Thread类中->从而实现发送者和接收者之间解耦
    • 访问者模式
      • 不改变各元素类的前提下对这些元素进行的新的操作
      • 双分派
        • 静态分派
          • 方法重载
        • 动态分派
          • 方法重写
      • 在不破坏元素内部结构时,通过向元素内部植入接口操作,从而实现此接口,以重载的方式识别不同的元素对其功能进行扩长
  • 状态变化
    • 状态模式
      • 根据对象得内部状态改变其的行为
      • 案例:贩卖机
        • 枚举记录状态 + 贩卖机Machine
        • State接口(进行状态切换)+贩卖机Machine
        • State接口+ 贩卖机Machine控制状态切换
        • State单例模式
    • 备忘录模式
      • 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
      • 拷贝实现
        • 1.可以直接被修改
        • 2.可以直接new创建快照
      • 使用不同类相同结构记录+只能原始类才能访问创建
        • 同包下权限限制
        • 静态内部类
        • 接口对外开发,实现类同包权限限制
  • 领域问题
    • 解释器模式
      • 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子
  • 其他模式
    • 空指针模式
      • 通过接口实现一个无任何的实现方法,避免null报错
    • 懒加载模式
      • 推迟对象的创建或者某些操作的执行,来一定程度避免资源消耗
      • 实现:函数接口
    • Saga模式
      • Saga是一种分布式事务的模式,它包含一系列事务步骤,这些步骤被设计成可以被单独执行或者回滚。这些事务步骤可以异步执行,它们之间通过一系列的补偿机制(Compensation)来确保系统的一致性。
    • AOP
      • 代码实现

http://www.mrgr.cn/news/34573.html

相关文章:

  • SpringBoot+Aop+注解方式 实现多数据源动态切换
  • vcruntime140_1.dll无法继续执行代码的6种解决方法
  • Undet for sketchup 2023.3注册机 支持草图大师sketchup2021-2022-2023
  • 数据结构之图的遍历
  • MySQL | 使用 HAVING 子句进行高级数据筛选
  • 数据链路层协议 —— 以太网协议
  • 如何快速免费搭建自己的Docker私有镜像源来解决Docker无法拉取镜像的问题(搭建私有镜像源解决群晖Docker获取注册表失败的问题)
  • 全栈开发(四):使用springBoot3+mybatis-plus+mysql开发restful的增删改查接口
  • 代码随想录算法训练营Day11
  • JDK7u21 HashMap版
  • C++之STL—vector容器进阶篇
  • Spring源码学习:SpringMVC(2)DispatcherServlet初始化【子容器9大组件】
  • go解决引入私有包报错“Repository owner does not exist“的两种方式
  • 难题妙解——前K个高频单词
  • Vue从入门到精通:全方位掌握Vue.js开发技能
  • CF 461 B Appleman and Tree 题解(树形 dp+排列组合)
  • MySQL和SQL的区别简单了解和分析使用以及个人总结
  • 手写数字识别案例分析(torch,深度学习入门)
  • 看Threejs好玩示例,学习创新与技术(React-three-fiber)
  • 有空格输入