• 尚硅谷-设计模式篇


    ​ 只学了点理论概念,没有实操代码,感觉无论是项目架构、代码设计,还是团队人员管理,其实都是设计模式的具体落地实现。

    https://www.bilibili.com/video/BV1G4411c7N4?p=149&vd_source=510ec700814c4e5dc4c4fda8f06c10e8

    csdn csdn csdn csdn csdn


    🔥1. 基本概念

    1.1. 基本名词
    1.1.1 设计模式用途

    ​ 面向对象->功能模块(设计模式+算法数据结构)->框架(多种设计模式)->架构(服务器集群)。实际开发中,就是要考察不同场景变更下,项目用到的设计模式是否能功能变更兼容,就是为了让代码拓展性更好,代码复用性更强,可读性更好,高内聚低耦合各个系统互不干扰

    1.1.2 七大原则
    1. 单一职责原则:每个类或者方法就是负责单一个功能
    2. 接口隔离原则:每个接口功能只给全部用到的人,非全部用到的就要拆分出来接口,就是不要把接口功能都混在一起
    3. 依赖倒置原则:每个功能尽量用抽象类或者接口封装
    4. 里氏替换原则:子类用父类方法、变量尽量不要重写,保证功能不要有变更
    5. 开闭原则:已有的代码尽量保证拓展开发,而对原有代码修改的关闭
    6. 迪米特原则:对象与对象之间保证最少的关系,尽量不要类和类之间互相调用
    7. 合成复用原则:优先用聚合(B类中定义一个A),避免用继承

    ​ 总结:就是减少类和类之间的关系,保证每个类功能独立,避免修改,对于重复功能能复用代码就复用,拆成接口来进行复用,便于管理。

    1.1.3 UML
    1.1.3.1 基本概念

    ​ 类与类之间的关系

    image-20220816103215770

    1.2 设计模式
    1.2.1 基本分类

    ​ 创建型,结构型,行为型

    image-20220816112858637

    1.2.2 创建型模式
    1.2.2.1 单例模式*

    ​ 饿汉式:类加载就申请,会导致内存浪费

    ​ 懒汉式:用到再new

    ​ DCL双重检测:volatile变量判断 + synchronized类修饰保证单例

    1.2.2.2 工厂模式*

    ​ 工厂就类似一个抽象类或者接口,由各自实现类自己去实现

    1.2.2.3 原型模式

    ​ 相同的对象要统一赋值,new多个比较麻烦,就用clone赋值

    1.2.2.4 建造者模式

    ​ 就是把一个功能定义成多步,然后自己实现供外部调用,和工厂不同的是建造者类似于一个模板定义好了的,而工厂模式可以随意改变内部功能。

    1.2.2.5 小结

    ​ 总的来说,创建型就类似一个功能类,是拆分实现,还是要复用,还是把功能都提取出来定义成一个接口,在实际开发中为了简化代码,

    1.2.3 结构性模式
    1.2.3.1 适配器模式

    ​ 就是为了兼容某个接口,弄个接口适配器,比如两个对象都继承一个父类,这样利用父类转换就没问题了

    1.2.3.2 桥接模式

    ​ 就是把抽象接口和功能分层,避免把各个层次管理分开,比如手机样式和手机分开,这样只用改一部就行了。

    1.2.3.3 装饰者模式*

    ​ 在原始功能上增加,不变动之前代码

    1.2.3.4 组合模式

    ​ 就是针对一对多的场景,之前是采用继承,但是实际应该弄成树形一对多的组合关系

    1.2.3.5 外观模式

    ​ 就是对多个子接口功能包装一个新功能来进行调用。

    1.2.3.6 享元模式

    ​ 共享对象,就是一个功能要重复利用修改的话,尽量做成可配置化拆分修改的

    1.2.3.7 代理模式*

    ​ 使用一个代理,Spring-jdk, cglib就是这种

    1.2.3.8 小结

    ​ 结构性就是各个功能之间关联,是共享,还是代理,还是要统一管理,拆分开来

    1.2.4 行为型模式
    1.2.4.1 模板方法模式

    ​ 模板方法就是父类里面定义的模板,方便子类复用。

    1.2.4.2 命令模式

    ​ 就是发起者和调用者之间弄个命令队列,可以终止,重试,等等

    1.2.4.3 访问者模式

    ​ 就是在调用的类上加一个访问者接口,统一管理

    1.2.4.4 迭代器模式

    ​ 就是用迭代器遍历管理对象

    1.2.4.5 观察者模式*

    ​ subject一个变化,通知多个observer。

    1.2.4.6 中介者模式

    ​ MVC中C就是介于代码和视图之间的中介者,起到一个平衡作用

    1.2.4.7 备忘录模式

    ​ 就是记录用户之前步骤,使功能可以回退

    1.2.4.8 解释器模式

    ​ jvm里面解释代码

    1.2.4.9 状态模式

    ​ 就是利用状态来控制、观察代码流程,减少if-else判断,增加代码拓展性

    1.2.4.10 策略模式

    ​ 减少继承,多用组合。代码分为变化的和不变的,频繁变化的就开放,不变的就关闭

    1.2.4.11 责任链模式

    ​ 请求和处理分开,一个链路分成多个结点

    1.2.4.12 小结

    ​ 行为型更多在于系统流程处理,中间观察者这种就设计到mq,责任链又涉及到异步线程池,链路拆分这些,备忘录又设计到历史数据记录与回退,状态模式又涉及到每个步骤的记录存储。


    1.2.5 个人总结

    image-20220816191706475


  • 相关阅读:
    了解 IPv4 和 IPv6 之间的区别?
    iOS——单例模式
    css布局-弹性布局学习笔记
    三、综合——计算机应用基础
    Arduino安装全流程(包括ESP32离线包安装)
    新学期,新flag | 新学期的目标
    【综合笔试题】30. 串联所有单词的子串
    并查集的学习
    VUE之旅—day3
    鸿蒙原生应用元服务-访问控制(权限)开发应用权限列表二
  • 原文地址:https://blog.csdn.net/Empire_ing/article/details/126559537