4.4 KiB
设计模式学习
大纲
概述
1.如何评价代码的好坏
2.编程方法论
3.设计模式分类
4.六大设计原则
单一职责
里氏替换
依赖倒置
接口隔离
迪米特
开闭
名词解释
创建型
单例模式
工厂模式
抽象工厂模式
建造者模式
原型模式
结构型
代理模式
适配器模式
桥接模式
装饰器模式
组合模式
外观模式
享元模式
行为型
观察者模式
模板模式
策略模式
责任链模式
迭代器模式
状态模式
访问者模式
备忘录模式
命令模式
解释器模式
中介模式
5.UML类图
2023/1/30学习
概述
1.如何评价代码的好坏
可扩展 可复用 可读 简洁 可测试 灵活 可维护
2.编程方法论
设计模式 + 设计原则 + 面向对象 + 编程规范 融汇贯通(先实现再考虑其它的)
3.设计模式分类
创建型 行为型 结构型
4.六大设计原则
单一职责
一个类只负责一个功能
里氏替换
方法参数定义为接口类型,不同的业务传入不同的实现类
依赖倒置
上层不应该依赖下层,如controller 不应该依赖serviceImpl,应该依赖其接口
接口隔离
不同的业务系统,在使用同一个业务对象时(微服务中),应当针对不同的系统设计出最小的依赖接口
迪米特
一个类依赖另一个类,应该依赖其接口
开闭
在扩展新的业务 不能改变原有的业务功能
5.UML类图
创建型
单例模式
饿汉式:没有做到懒加载,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->直接调用目标类方法
适配器模式
桥接模式
指生产一个产品,分多步执行,每一步都有多种选择
装饰器模式
组合模式
外观模式
享元模式
行为型
观察者模式
模板模式
策略模式
责任链模式
迭代器模式
状态模式
访问者模式
备忘录模式
命令模式
解释器模式
中介模式
设计原则总结

工厂模式总结

建造者模式总结
动态代理总结