代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,通俗的来说代理模式就是咱们生活中常见的中介。这种类型的设计模式属于结构型模式程序员
分类设计模式
静态代理:由程序员建立或特定工具自动生成源代码,在对其编译。在程序员运行以前,代理类.class文件就已经被建立了。缓存
动态代理:是在程序运行时经过反射机制动态建立的。工具
Cglib代理:静态代理和动态代理模式都是要求目标对象是实现一个接口的目标对象,可是有时候目标对象只是一个单独的对象,并无实现任何的接口,这个时候就可使用以目标对象子类的方式类实现代理.Cglib代理,也叫做子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能的扩展。spa
特色设计
中介隔离做用:在某些状况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象能够在客户类和委托对象之间起到中介的做用,其特征是代理类和委托类实现相同的接口。代理
开闭原则,增长功能:代理类除了是客户类和委托类的中介以外,咱们还能够经过给代理类增长额外的功能来扩展委托类的功能,这样作咱们只须要修改代理类而不须要再修改委托类,符合代码设计的开闭原则。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及过后对返回结果的处理等。代理类自己并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。真正的业务功能仍是由委托类来实现,可是能够在业务功能执行的先后加入一些公共的服务。例如咱们想给项目加入缓存、日志这些功能,咱们就可使用代理类来完成,而不必打开已经封装好的委托类。日志
应用场景对象