尚硅谷-设计模式篇
只学了点理论概念,没有实操代码,感觉无论是项目架构、代码设计,还是团队人员管理,其实都是设计模式的具体落地实现。
https://www.bilibili.com/video/BV1G4411c7N4?p=149&vd_source=510ec700814c4e5dc4c4fda8f06c10e8
🔥1. 基本概念
1.1. 基本名词
1.1.1 设计模式用途
面向对象->功能模块(设计模式+算法数据结构)->框架(多种设计模式)->架构(服务器集群)。实际开发中,就是要考察不同场景变更下,项目用到的设计模式是否能功能变更兼容,就是为了让代码拓展性更好,代码复用性更强,可读性更好,高内聚低耦合各个系统互不干扰
1.1.2 七大原则
- 单一职责原则:每个类或者方法就是负责单一个功能
- 接口隔离原则:每个接口功能只给全部用到的人,非全部用到的就要拆分出来接口,就是不要把接口功能都混在一起
- 依赖倒置原则:每个功能尽量用抽象类或者接口封装
- 里氏替换原则:子类用父类方法、变量尽量不要重写,保证功能不要有变更
- 开闭原则:已有的代码尽量保证拓展开发,而对原有代码修改的关闭
- 迪米特原则:对象与对象之间保证最少的关系,尽量不要类和类之间互相调用
- 合成复用原则:优先用聚合(B类中定义一个A),避免用继承
总结:就是减少类和类之间的关系,保证每个类功能独立,避免修改,对于重复功能能复用代码就复用,拆成接口来进行复用,便于管理。
1.1.3 UML
1.1.3.1 基本概念
类与类之间的关系
1.2 设计模式
1.2.1 基本分类
创建型,结构型,行为型
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 个人总结
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它在空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。