uml
类图通过类结构如+表示public表示类,通过聚合,组合,依赖以及继承描述类的关系,耦合程度依次增高,聚合成员对象可以脱离整体独立存在
设计原则
包括开闭,依赖倒转以及迪米特原则
创建者模式
饿汉式单例可能会被反射以及反序列化破坏
但是枚举饿汉式不会被这两个破坏,但是还是会被unsafe类破坏
双重校验懒汉式使用volatile的原因是为了保证new实例的有序性,防止其他线程拿到构造方法调用前的实例
静态内部类懒汉式通过在内部类实现饿汉式单例以实现懒汉式,因为JVM在加载外部类时, 不会加载静态内部类
Runtime类内部使用了饿汉式单例
工厂模式分为简单静态工厂和抽象工厂
原型模式包括深克隆和浅克隆,深克隆就是serializable接口,浅克隆就是clone接口
建造者模式就是@Builder注解
结构型模式
代理模式包括静态代理,jdk动态代理和cglib动态代理,静态代理即自己编写代理类
jdk动态代理通过Proxy类创建,传入接口以及一个InvocationHandler对象,生成的代理类实现了该接口,并在InvocationHandler对象的方法中通过反射调用原始方法,反射调用在14次之后会优化为正常调用
cglib通过Enhancer类创建,传入类对象以及一个MethodInterceptor对象,生成的代理类继承了该类,并在MethodInterceptor对象的方法中通过methodProxy对象正常调用原始方法
使用场景包括rpc调用
ASM以及javAssist提供了编辑字节码的能力
java中字符流与字节流的转换使用了适配器模式
字符流使用了装饰者模式实现了带缓冲区的字符流
行为型模式
模板方法模式的模板方法一般加上final字段,字节流中使用了模板方法定义了字节读取的固定步骤
策略模式通过环境类管理各种策略,Arrays类就是一个环境类,sort方法可以传入自己的策略
责任链模式由请求响应对象,处理者handler对象以及调用链chain对象组成
springMVC的过滤器应用了责任链模式
状态模式封装了各种状态类,状态类中状态变化引起环境类变化,常和状态机配合使用
spring中的事件使用了观察者模式即发布订阅模式
消息队列使用了生产者消费者模式