Java设计模式学习路线
创建型
传统实现
- 工厂模式
- bean工厂(Spring IOC)
类模式
- 工厂方法模式
* 单一职责原则、开闭原则、平台代码不用关心具体代码实现
对象模式
- 单例模式
* Double-check懒汉式
* volatile易变关键字防止指令重排
* 静态内部类懒汉式
* 构造方法null判空防止反射
* 实现readSolve方法防止反序列化单例破坏
* 枚举
- 原型模式
* 实现Cloneable接口达到浅/深拷贝的效果
* 序列化、反序列化实现深拷贝的效果(不推荐,流操作消耗CPU性能)
- 抽象工厂模式
* 单一职责原则、开闭原则、平台代码不用关心具体代码实现
- 建造者模式
* 适用于复杂对象,独立易扩展,便于控制细节
* 建造者1:建造者接口类
* 变种建造者2:静态内部类
结构型
类模式
- 类适配器模式
对象模式
- 代理模式
* 与被代理类实现同一接口,通过构造器传入被代理类来增强其方法,例如日志打印、时间统计等
* 动态代理
* 通过传入InvocationHandler策略调用Proxy创建代理实例的方法实现动态代理(被代理类必须实现接口)
* Cglib代理
* 创建一个Enhancer对象,设置其父类为被代理类的class,其callback为MethodInterceptor策略,调用create方法实现动态代理(*被代理类不需要实现接口)
* 面向切面编程(Spring AOP)
* xml实现
* @注解实现
* xml文件添加自动构建代理,且开启Cglib
* <aop:aspectj-autoproxy proxy-target-class="true"/>
* @Aspect切面
* @Before在目标方法被调用之前做增强
* @AfterReturning在目标方法正常完成后做增强
* @AfterThrowing在目标方法抛出异常后做增强
* @After在目标方法调用完成之后做增强
* @Around环绕通知,在目标方法调用前后做增强
- 对象适配器模式
- 桥接模式
- 装饰器模式
- 外观模式
- 享元模式
* 原系统中有大量类似的粒子对象时,可以节省CPU和内存资源
- 组合模式
* 举例:AB 由 A,B组成,Chapter由Section组成
行为型
类模式
- 模板方法模式
* 定义一个算法的骨架,将一些特定的步骤延迟到子类
对象模式
- 观察者模式
- 策略模式
- 责任链模式
- 迭代器模式
- 命令模式
- 中介者模式
- 状态模式
- 解释器模式
- 备忘录模式
- 访问者模式