Offer

尚硅谷-设计模式篇

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

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


posted @ 2022-08-27 16:33  Empirefree  阅读(144)  评论(0编辑  收藏  举报