导图社区 设计模式
设计模式详解:包含动代理模式、单例模式、工厂模式、策略模式。
社区模板帮助中心,点此进入>>
互联网9大思维
安全教育的重要性
组织架构-单商户商城webAPP 思维导图。
个人日常活动安排思维导图
域控上线
西游记主要人物性格分析
17种头脑风暴法
python思维导图
css
CSS
设计模式
代理模式
动态代理
步骤
1 重写了invoke方法的invocationhandler类 2 通过Proxy.getProxyClass基于被代理的接口类生成代理类的class对象 3 调用Proxy.newProxyInstance基于class对象和invocationhandler类代理类实例
CGLIB
但其实还有一种思路:通过继承。即:让 Proxy 继承 RealSubject,这样二者同样具有相同的功能,Proxy 还可以通过重写 RealSubject 中的方法,来实现多态。CGLIB 就是基于这种思路设计的。
区别
jdk的动态代理只可以为接口去完成操作,而cglib它可以为没有实现接口的类去做代理,也可以为实现接口的类去做代理。
静态代理
单例模式
懒汉模式
public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { if (instance==null) instance=new Singleton(); return instance; } }
恶汉模式
public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } }
策略模式
避免使用多重条件判断(如果不用策略模式我们可能会使用多重条件语句,不利于维护)
扩展性良好,增加一个策略只需实现接口即可
应用:
db2 oracle
ceph sftp ftp
mq
一个策略类,定义公共方法,每个策略实现公共方法,项目启动时读取配置文件的策略自动加载对应的策略进入策略类
工厂模式
创建对象和使用对象解耦
简化对象初始化代码