Skip to content

设计模式

约 762 字大约 3 分钟

设计模式

2024-03-16

设计模式就是总结常用的套路 形成一种解决方案

缺点 大多都依赖于抽象 (AOP能解决这个问题!不破坏封装的前提下扩展)

设计原则名称定  义使用频率
单一职责 SRP
Single Responsibility Principle
一个类只负责一个功能领域中的相应职责★★★★☆
开闭原则 OCP
Open-Closed Proinciple
软件实体对应扩展开放,对修改关闭★★★★★
里氏代替原则 LSP
Liskov Substitution Principle
所有引用基类对象的地方能够透明地使用其子类的对象★★★★★
依赖倒置原则 DIP
Dependence Inversion Principle
抽象不应该依赖细节,细节应该依赖抽象★★★★★
接口隔离原则 ISP
Interface Segregation Principle
使用多个专门的接口,而不是用单一的总接口★★☆☆☆
合成复用原则 CRP
Composite Reuse Principle
尽量使用对象组合,而不是继承来达到服用的目的★★★★☆
迪米特法则 LoD
Law of Demeter
一个软件实体应当尽可能少与其他实体发生互相作用★★★☆☆

三大类型

  • 创建型 (关注对象的创建)

    • 单例模式 (数据库连接,线程池,配置文件对象,IOC容器)
      • 私有化构造函数,抛出创建对象的方法(防止被人实例创建对象)
        • 1.通过构造函数+双判断锁创建
          • 双判断锁,提升性能 在对象初始化之前判断多线程并发的锁少等待
        • 2.使用静态构造函数构造(静态构造函数只会被创建一次)
        • 3.直接创建静态字段 实例 (先静态字段在创建静态构造函数)
    • 原型模式(快速获得对象,对象之间又不相互影响)
      • 创建对象时克隆对象 可以在内存中开辟(克隆)新的内存 但是也只会创建一次
        • 对象.MemberwiseClone()
    • 三大工程(转移对象的创建)
    • 建造者(复杂的工厂)
  • 结构性 (关注类与类的关系)

    • 适配器 (可以参与 扩展业务 没有什么是包一层不能解决的,如果有那就再包一层

      • 类适配器:比如通过中间类 继承 改变约束 实现(继承)
      • 对象适配器:通过内置对象达到适配(组合)
        • 组合优于继承:继承是强侵入性(会有多余的东西)。灵活性(组合依赖抽象,继承依赖细节)
    • 代理模式(不允许参与业务)

      • 也是包一层 把对象代理一下抛出来。 AOP!!
        • 可以用于业务和通用逻辑分离(日志、异常、缓存、权限)
        • 可以代理成单例 将类的对象 加上static静态
  • 行为性 (关注对象与行为的关系)

    • 责任链模式
      • 把对象的行为在最上层全部完成 )(流程审批、工资结算)

图片

image-20200731211950314

设计模式

抽象工厂模式

生成器模式