/** * 目标类。也称为被代理类 */ public class A { public void fun(){ System.out.println("A.fun()!!!"); } }
/** * 代理类,子类。 */ public class ProxyA extends A{ @Override public void fun() { super.fun(); proxyFun(); } public void proxyFun(){ System.out.println("ProxyA.proxyFun()!!"); } }
public static void main(String[] args) { A a = new ProxyA();//被代理指向代理类(父类引用指向子类实例) a.fun(); }
输出:A.fun()!!!
ProxyA.proxyFun()!!
2.1 静态代理设计模式
编写代理接口:用来暴露需要被代理的方法。
public interface Proxy { void fun();//被代理方法 }
编写被代理类:
/** * 目标类,被代理类 */ public class Service implements Proxy { @Override public void fun() { System.out.println("被代理的fun()"); } }
编写代理类:
静态代理模式是针对接口实现的代理。
与被代理类实现同一个代理接口;在代理类中编写代理接口的属性做为 被代理对象。
/** * 代理类 */ public class ProxyImpl implements Proxy { private Proxy proxyTarget;//被代理对象 public ProxyImpl(Proxy proxyTarget) { this.proxyTarget = proxyTarget; } @Override public void fun() { System.out.println("功能之前的功能扩展!!!"); proxyTarget.fun(); System.out.println("功能之后的功能扩展!!!"); } }
编写测试类:
public static void main(String[] args) { Service service = new Service();//被代理对象。 ProxyImpl proxyImpl = new ProxyImpl(service);//代理对象, service是确定的,不可随意更改 proxyImpl.fun(); }