代理模式是一种处理对象与对象之间关系的模式,代理对象对委托类进行预处理,包括但不限于筛选,预处理,后处理等操作,使用时直接使用代理对象代替委托对象;代理对象和委托对象继承相同的接口,代理对象中持有委托对象;
顶层接口:
public interface Subject { void method(); }委托类:
public class Source implements Subject{ private Integer number ; public Integer getNumber() { return number; } public void setNumber(Integer number) { this.number = number; } public Source(Integer number) { super(); this.number = number; } @Override public void method() { System.out.println("Source类的method方法被使用"); } }代理对象:
public class Proxy implements Subject{ private Source source; public Proxy(Source source){ this.source = source; } @Override public void method() { if (source.getNumber() > 10){ source.method(); }else{ System.out.println("未执行Source类的method"); } } } Client类: public class Client { public static void main(String[] args) { Proxy proxy1 = new Proxy(new Source(5)); Proxy proxy2 = new Proxy(new Source(15)); proxy1.method(); proxy2.method(); } }Client类的执行结果:
未执行Source类的method Source类的method方法被使用这个实例展示的是代理模式中代理类对委托类的筛选功能,我们使用代理对象中的方法,判断委托类是否符合筛选条件,根据情况调用委托类的方法;
从形式上看,代理模式和装饰者模式的代码很像,都使用实现同一接口并使用组合方式将两个类联系在一起,但是代理模式和装饰者模式的目的是不同的,装饰者是增强作用可以理解为做加法,其中方法的核心功能的实现是被装饰类的,而静态代理是在做减法,对代理对象进行限制或者对方法执行后的结果做处理;所以代理模式和装饰者模式的目的是不同的;