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

  • 相关阅读:
    XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件
    在Xamarin.iOS项目中使用预设数据库
    函数封装多个不同按钮的点击事件
    ajax请求数据动态渲染表格
    计算历时长度
    layui单文件上传
    滚动到顶部固定
    下载
    第一个项目技术总结
    单选框
  • 原文地址:https://www.cnblogs.com/niuyg928/p/10921720.html
Copyright © 2011-2022 走看看