设计模式六大原则
参考文档:设计模式6大原则
单例模式
代理模式
定义:即给目标对象提供一个代理对象,并由代理对象控制对于目标对象的访问,即客户不直接操控目标对象,而是通过代理对象间接地操控代理对象。这种类型的设计模式属于结构型模式。
使用场景:当不能访问或不想直接访问或访问某个对象存在困难时,我们可以通过一个代理对象来间接访问,为了客户端使用的透明性,我们应该保证代理对象和被代理对象应该实现同一个接口。
静态代理与动态代理区别
静态代理:在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在程序运行前就确定了。
优点:1)降低了耦合度;2)代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用。
缺点:1)代理对象的一个接口只服务于一种类型的目标对象,如果要服务多类型的目标对象,则需要为每种目标对象都实现一个静态代理对象;2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法,增加了代码的复杂度。
动态代理:类的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以不存在代理类的字节码文件。代理类和委托类的关系是在程序运行时确定。
优点:Java动态代理可以避免静态代理带来的代码冗余的问题。
缺点:Java动态代理只能针对接口创建代理,不能针对类创建代理。
参考文档:代理模式