Java动态代理模式
代理:一个角色代表别一个角色来完成某些特定的功能。
比如:生产商,中间商,客户这三者这间的关系
客户买产品并不直接与生产商打交道,也不用知道产品是如何产生的,客户只与中间商打交道,而中间商就可以对产品进行一些包装,提供一些售后的服务。
代理模式有三个角色: 1. 抽象主题角色 2. 代理主题角色 3. 实际被代理角色
下面我们来个一个静态代理的实现。
我以一个坦克为例。
抽象主题角色:Moveable
package com.gjy.proxy; public interface Moveable { void move(); }
代理主题角色:TanktimeProxy
package com.gjy.proxy; public class TanktimeProxy implements Moveable{ private Moveable t; public TanktimeProxy(Moveable t) { super(); this.t = t; } @Override public void move() { long time1 = System.currentTimeMillis(); System.out.println("time1="+time1); t.move(); long time2 = System.currentTimeMillis(); System.out.println("time2="+time2); System.out.println("运行时间为:"+(time2-time1)); } }
package com.gjy.proxy; public class Tank implements Moveable{ @Override public void move() { System.out.println("TanK moving........"); } }
测试:
package com.gjy.proxy; public class TestTank { public static void main(String[] args) { Tank t = new Tank(); Moveable move = new TanktimeProxy(t); move.move(); } }
package com.gjy.proxy; public class TanklogProxy implements Moveable{ private Moveable t; public TanklogProxy(Moveable t) { super(); this.t = t; } @Override public void move() { System.out.println("start move........"); t.move(); System.out.println("end move......"); } }
测试:
package com.gjy.proxy; public class TestTank { public static void main(String[] args) { Tank t = new Tank(); Moveable move = new TanktimeProxy(t); Moveable movet = new TanklogProxy(move); movet.move(); }
}