diff --git a/设计模式/myimage/1.UML类图.jpg b/设计模式/myimage/1.UML类图.jpg new file mode 100644 index 0000000..57533d4 Binary files /dev/null and b/设计模式/myimage/1.UML类图.jpg differ diff --git a/设计模式/myimage/2. 六大设计原则.jpg b/设计模式/myimage/2. 六大设计原则.jpg new file mode 100644 index 0000000..d0095a5 Binary files /dev/null and b/设计模式/myimage/2. 六大设计原则.jpg differ diff --git a/设计模式/myimage/3. 工厂模式.jpg b/设计模式/myimage/3. 工厂模式.jpg new file mode 100644 index 0000000..6300650 Binary files /dev/null and b/设计模式/myimage/3. 工厂模式.jpg differ diff --git a/设计模式/myimage/4.建造者模式.jpg b/设计模式/myimage/4.建造者模式.jpg new file mode 100644 index 0000000..797ebc5 Binary files /dev/null and b/设计模式/myimage/4.建造者模式.jpg differ diff --git a/设计模式/myimage/5.动态代理.jpg b/设计模式/myimage/5.动态代理.jpg new file mode 100644 index 0000000..c333410 Binary files /dev/null and b/设计模式/myimage/5.动态代理.jpg differ diff --git a/设计模式/设计模式.md b/设计模式/设计模式.md new file mode 100644 index 0000000..85dfc1d --- /dev/null +++ b/设计模式/设计模式.md @@ -0,0 +1,242 @@ +# 设计模式学习 + +## 大纲 + +**概述** + +**1.如何评价代码的好坏** + +**2.编程方法论** + +**3.设计模式分类** + +**4.六大设计原则** + +**单一职责** + +**里氏替换** + +**依赖倒置** + +**接口隔离** + +**迪米特** + +**开闭** + +**名词解释** + +**创建型** + +**单例模式** + +**工厂模式** + +**抽象工厂模式** + +**建造者模式** + +**原型模式** + +**结构型** + +**代理模式** + +**适配器模式** + +**桥接模式** + +**装饰器模式** + +**组合模式** + +**外观模式** + +**享元模式** + +**行为型** + +**观察者模式** + +**模板模式** + +**策略模式** + +**责任链模式** + +**迭代器模式** + +**状态模式** + +**访问者模式** + +**备忘录模式** + +**命令模式** + +**解释器模式** + +**中介模式** + +**5.UML类图** + +## 2023/1/30学习 + +概述 + +1.**如何评价代码的好坏** + +可扩展 可复用 可读 简洁 可测试 灵活 可维护 + +2.**编程方法论** + +设计模式 + 设计原则 + 面向对象 + 编程规范 融汇贯通(先实现再考虑其它的) + +3.**设计模式分类** + +创建型 行为型 结构型 + +4.**六大设计原则** + +**单一职责** + +一个类只负责一个功能 + +**里氏替换** + +方法参数定义为接口类型,不同的业务传入不同的实现类 + +**依赖倒置** + +上层不应该依赖下层,如controller 不应该依赖serviceImpl,应该依赖其接口 + +**接口隔离** + +不同的业务系统,在使用同一个业务对象时(微服务中),应当针对不同的系统设计出最小的依赖接口 + +**迪米特** + +一个类依赖另一个类,应该依赖其接口 + +**开闭** + +在扩展新的业务 不能改变原有的业务功能 + +**5.UML类图** + +![1.UML类图](D:\01\md文档\myimage\1.UML类图.jpg) + +**创建型** + +**单例模式** + +饿汉式:没有做到懒加载,JVM保证线程安全 + +懒汉式不加锁:懒加载,线程不安全 + +懒汉式加锁:懒加载,线程不安全,锁粒度太大 + +DCL:懒加载,线程不安全 + +静态内部类:懒加载,JVM保证线程安全 + +枚举(最佳) + +反射机制破坏单例模式 ,解决方案 在构造方法中添加 instance 非空判断 + +序列化破坏单例模式,添加readResolve方法 + +**工厂模式** + +简单工厂 优点: 象的创建和业务逻辑层分开 缺点:新增产品时需要修改工厂类 不满足ocp + +工厂方法 优点:在简单工厂的基础上,为每一个产品增加一个工厂,满足ocp 缺点:类爆炸 + +抽象工厂 优点:将产品进行分类,为一类产品创建一个工厂(减少了工厂的创建), + +**建造者模式** + +当产品对象非常复杂时,建造者需要分步骤执行,可以类似工厂方法模式 + +**原型模式** + +根据已有的对象复制出一个新的,有浅克隆和深克隆之分 + +深克隆可以有 Cloneable接口,或者BeanUtils或者SerializationUtils实现 + +**结构型** + +**代理模式** + +静态代理 与动态代理 + +区别在于 生成代理类的时机 不同 静态代理在编译时 动态代理在运行时 + +JDK动态代理:调用Proxy.newProxyInstance方法动态创建代理类字节码二进制流,用的是ProxyGenarator技术 + +CGLIB动态代理:调用的是Enhancer第三方ASM框架生成字节码 + +两者对比: + +生成代理类的技术不同:jdk使用ProxyGenarator生成,cglib使用ASM框架生成 + +生成代理类的数量不同:jdk只生成一个代理类,cglig生成一个代理类和两个索引类(方法名和索引) + +代理类的增强方式不同:jdk是实现共同的接口,cglib是继承 + +调用方式不用:jdk是反射调用,代理类方法 -> invok() ->反射调用目标类方法,cglib是直接调用 代理类方法 -> intercept->直接调用目标类方法 + +**适配器模式** + +**桥接模式** + +指生产一个产品,分多步执行,每一步都有多种选择 + +**装饰器模式** + +**组合模式** + +**外观模式** + +**享元模式** + +**行为型** + +**观察者模式** + +**模板模式** + +**策略模式** + +**责任链模式** + +**迭代器模式** + +**状态模式** + +**访问者模式** + +**备忘录模式** + +**命令模式** + +**解释器模式** + +**中介模式** + +设计原则总结 + +![2. 六大设计原则](D:\01\md文档\myimage\2. 六大设计原则.jpg) + +工厂模式总结 + +![3. 工厂模式](D:\01\md文档\myimage\3. 工厂模式.jpg) + +建造者模式总结 + +![4.建造者模式](D:\01\md文档\myimage\4.建造者模式.jpg) + +动态代理总结 + +![5.动态代理](D:\01\md文档\myimage\5.动态代理.jpg) +