zoukankan      html  css  js  c++  java
  • 动态代理

    作用:不改变源码的基础上对已有方法进行增强,他是AOP思想的实现技术,它分为两类:一类是基于接口的,另一个是基于子类的,这两种都有各自的应用场景,如dbcp就是用的是动态代理,c3p0就是使用静态代理装饰者模式。

    以下是代码:

    定义接口

    public interface IAction {
    public void comnActor(Float money);
    public void dangerActor(Float money);

    }

    接口实现类

    public class ActorImpl implements IAction {

    @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);
    }

    }

    代理类:

    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);
    }
    }

  • 相关阅读:
    DP2_第K优解
    DP1
    算法第一讲_动态规划
    CodeForces 487A Fight the Monster
    HDU 2899 Strange fuction
    lower_bound() 与 upper_bound()
    jQuery qrcode生成二维码
    本地代码上传至git仓库
    图片懒加载
    react-native学习(一)————使用react-native-tab-navigator创建底部导航
  • 原文地址:https://www.cnblogs.com/niuyg928/p/10921720.html
Copyright © 2011-2022 走看看