只学了点理论概念,没有实操代码,感觉无论是项目架构、代码设计,还是团队人员管理,其实都是设计模式的具体落地实现。
https://www.bilibili.com/video/BV1G4411c7N4?p=149&vd_source=510ec700814c4e5dc4c4fda8f06c10e8
面向对象->功能模块(设计模式+算法数据结构)->框架(多种设计模式)->架构(服务器集群)。实际开发中,就是要考察不同场景变更下,项目用到的设计模式是否能功能变更兼容,就是为了让代码拓展性更好,代码复用性更强,可读性更好,高内聚低耦合各个系统互不干扰
总结:就是减少类和类之间的关系,保证每个类功能独立,避免修改,对于重复功能能复用代码就复用,拆成接口来进行复用,便于管理。
类与类之间的关系

创建型,结构型,行为型

饿汉式:类加载就申请,会导致内存浪费
懒汉式:用到再new
DCL双重检测:volatile变量判断 + synchronized类修饰保证单例
工厂就类似一个抽象类或者接口,由各自实现类自己去实现
相同的对象要统一赋值,new多个比较麻烦,就用clone赋值
就是把一个功能定义成多步,然后自己实现供外部调用,和工厂不同的是建造者类似于一个模板定义好了的,而工厂模式可以随意改变内部功能。
总的来说,创建型就类似一个功能类,是拆分实现,还是要复用,还是把功能都提取出来定义成一个接口,在实际开发中为了简化代码,
就是为了兼容某个接口,弄个接口适配器,比如两个对象都继承一个父类,这样利用父类转换就没问题了
就是把抽象接口和功能分层,避免把各个层次管理分开,比如手机样式和手机分开,这样只用改一部就行了。
在原始功能上增加,不变动之前代码
就是针对一对多的场景,之前是采用继承,但是实际应该弄成树形一对多的组合关系
就是对多个子接口功能包装一个新功能来进行调用。
共享对象,就是一个功能要重复利用修改的话,尽量做成可配置化拆分修改的
使用一个代理,Spring-jdk, cglib就是这种
结构性就是各个功能之间关联,是共享,还是代理,还是要统一管理,拆分开来
模板方法就是父类里面定义的模板,方便子类复用。
就是发起者和调用者之间弄个命令队列,可以终止,重试,等等
就是在调用的类上加一个访问者接口,统一管理
就是用迭代器遍历管理对象
subject一个变化,通知多个observer。
MVC中C就是介于代码和视图之间的中介者,起到一个平衡作用
就是记录用户之前步骤,使功能可以回退
jvm里面解释代码
就是利用状态来控制、观察代码流程,减少if-else判断,增加代码拓展性
减少继承,多用组合。代码分为变化的和不变的,频繁变化的就开放,不变的就关闭
请求和处理分开,一个链路分成多个结点
行为型更多在于系统流程处理,中间观察者这种就设计到mq,责任链又涉及到异步线程池,链路拆分这些,备忘录又设计到历史数据记录与回退,状态模式又涉及到每个步骤的记录存储。
