缺点:假如说在接口类中新增一个方法,相应的其他类也要进行修改,这样非常不方便,所以静态代理不经常使用,只是作为了解,而是用动态代理。 接口: HelloService(代理类与委托类有同样的接口)
public interface HelloService { void sayHello(); }委托类: HelloServiceImpl,真正的要完成的sayHello功能
//委托类(目标类) public class HelloServiceImpl implements HelloService{ @Override public void sayHello() { System.out.println("hello world"); } }代理类: HelloServiceProxy,不但完成日志功能,而且完成了真正的sayHello功能
//代理类 public class HelloServiceProxy implements HelloService{ //代理类对象中需要关联目标类对象 private HelloServiceImpl target; public HelloServiceProxy(HelloServiceImpl target) { this.target = target; } @Override public void sayHello() { //在真正调用目标对象的sayHello方法之前添加日志代码 System.out.println("log:sayHello马上要执行了..."); target.sayHello(); } }测试类
public class Test { public static void main(String[] args) { HelloServiceImpl target=new HelloServiceImpl(); HelloService proxy=new HelloServiceProxy(target);//传目标对象 proxy.sayHello();//需要打印日志时 //当不需要日志时,注释掉上面的,再target.sayHello(); //target.sayHello();//不需要打印日志时 } }