目录 单例模式 装饰器模式 适配器模式 工厂模式 观察者模式 代理模式 命令模式 单例模式 装饰器模式 适配器模式 工厂模式 策略模式 相较于工厂模式,更关注状态的切换。 观察者模式 代理模式 使用代理对象来代替对真实对象的访问,这样就可以在不修改原目标对象的前提下,扩展目标对象的功能,提供额外的功能操作。 例子:下面将通过多种方式去增强 send 方法。 1. 静态代理 2. JDK 动态代理 在 Java 动态代理机制中,InvocationHandler 接口用于自定义处理逻辑,Proxy 类的 newProxyInstance() 方法用于生成代理对象。 实现 3. CGLIB 动态代理 依赖 实现 4. 三种方式的对比 静态代理中,接口一旦增加新方法,目标对象和代理对象都要进行修改;而动态代理不需要实现接口,可以直接代理实现类,并且不需要对每个目标类都创建一个代理类。 静态代理在编译时就将接口、实现类、代理类这些都变成了一个个实际的 class 文件;而动态代理是在运行时动态生成类字节码,并加载到JVM中的。 JDK动态代理只能代理实现了接口的类或者直接代理接口,而CGLIB可以代理未实现任何接口的类。 JDK动态代理效率相较于CGLIB更加优秀。 CGLIB是通过生成一个被代理类的子类来拦截被代理类的方法调用,因此不能代理声明为 final 类型的类和方法。 命令模式