饿汉式

HUngry

StaticHungry+

 

懒汉式

LazySimple

LazyDCL

LazyInnerClass

注册式:

Enum

Container

ThreadLocal

相同:线程按顺序执行,依次访问getInstance()方法

两个线程同时进入判读,后者覆盖前者。

不相同

两个线程同时进入判断条件,并且分别创建两个不同对象:

 

以上,都能被反射破坏

代理模式:

静态代理

Dao

 

Service

@Autowired

Dao dao;

 

Controller

@Autowired

Service service;

动态代理:

AOP

增强功能,代码增强

非功能性代码

非功能性代码和功能性进行解耦

事务管理、日志监控、权限控制

jdk动态代理的原理:

  1. 拿到目标对象的引用
  2. 反射拿到对象的class
  3. 拿到目标对象所实现的所有的接口
  4. proxy工具类,用代码生成一个新的类实现所有的接口,保证和目标属于同一个继承系
  5. 用户拿到的对象,新类的对象(偷梁换柱),最终调用时新的对象功能
  6. 新对象,偷偷地实现的增强

CGLib动态代理的原理:

生成一个新的类,他对目标没有任何要求

继承目标类,新类变成目标类的子类

重写父类所有的方法,在子类中实现增强

字节重组的动作:达到生产商新类和目标类属于同一个继承者。

学习方法:

有没有颠覆你对代理模式的认知?

只是云亦云,知其然,并不知所以然

系统学习的方法,让我们学习的知识他不会忘

 

责任链模式

责任链模式:

Filter InterceptorPipeline

直说了自己的模式,没有写详细,程序员必备思想。