做用:不改變源碼的基礎上對已有方法進行加強,他是AOP思想的實現技術,它分爲兩類:一類是基於接口的,另外一個是基於子類的,這兩種都有各自的應用場景,如dbcp就是用的是動態代理,c3p0就是使用靜態代理裝飾者模式。ide
如下是代碼:代理
定義接口接口
public interface IAction {
public void comnActor(Float money);
public void dangerActor(Float money);get
}源碼
接口實現類io
public class ActorImpl implements IAction {class
@Override
public void comnActor(Float money) {
// TODO Auto-generated method stub
System.out.println("普通表演:"+money);
}基礎
@Override
public void dangerActor(Float money) {
// TODO Auto-generated method stub
System.out.println("危險表演:"+money);
}float
}方法
代理類:
public class ProxyAgent { @Test public void fun(){ //actor.comnActor(); final ActorImpl actor = new ActorImpl(); IAction actorProxy = (IAction) Proxy.newProxyInstance(actor.getClass().getClassLoader(), actor.getClass().getInterfaces(), new InvocationHandler() { Object retValue = null; @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Float money = (Float) args[0]; if(method.getName().equals("comnActor")){ if(money>10000){ retValue = method.invoke(actor, money/2); } }if(method.getName().equals("dangerActor")){ if(money>50000){ retValue = method.invoke(actor, money/2); } } return retValue; } }); actorProxy.comnActor((float) 20000.00); actorProxy.dangerActor((float) 60000.00); }}