静态代理通过继承实现静态代理

package com.jason.staticProxy;

/**
 * @author jason
 * @Description:定义一个汽车接口,里面包含汽车行驶的方法
 * @date 2018/2/2
 */
public interface Car {

    //定义一个汽车行驶的方法
    public  void run() throws Exception;
}
package com.jason.staticProxy;

import java.util.Random;

/**
 * @author jason
 * @Description: 一个实现了汽车的接口的类,并且里面实现了行驶的方法
 * @date 2018/2/2
 *
 *    这里有一个需求,想计算我们班汽车行驶的时间,因为JAVA程序我们遵循OCP(对扩展开放,对修改关闭)原则,所以为了不修改原来代码,
 *    //我们来采用静态代理模式:
 *
 */
public class Baoma implements Car {

    //实现行驶的方法
    @Override
    public void run() throws  Exception{
        //里面使用了使当前线程睡眠的方法,休眠若干秒
        Thread.sleep(new Random().nextInt(1000));
        System.out.println("奥迪汽车行驶结束...");
    }
}

package com.jason.staticProxy;

/**
 * @author jason
 * @Description:通过继承父类完成
 * @date 2018/2/2
 */
public class LogProxy extends TimeProxy{

    //通过实现父类的run()方法来完成代理
    @Override
    public void run() throws Exception {
        //模拟打印日志操作------在汽车行驶之前打印日志
        System.out.println("汽车开始行驶...");
        //父类对象来完成动作
        super.run();
        //模拟打印日志操作------在汽车结束之后打印日志
        System.out.println("汽车结束行驶...");

    }
}

package com.jason.staticProxy;

/**
 * @author jason
 * @Description: 通过继承来实现静态代理,和实现接口的实现方法是不同的
 * @date 2018/2/2
 */
public class TimeProxy extends Baoma {


    //重写父类的方法,完成对时间的代理
    @Override
    public void run() throws Exception {
        //记录汽车行驶之前的时间
        long start = System.currentTimeMillis();
        //使用父类的方法完成行驶动作
        super.run();
        //记录汽车行驶之后的时间
        long end = System.currentTimeMillis();
        //完成功能,打印出汽车行驶的时间
        System.out.println("汽车行驶的时间为"+(end - start));
    }
}

package com.jason.staticProxy;

/**
 * @author jason
 * @Description:测试代理类的方法
 * @date 2018/2/2
 */
public class Test {
    public static void main(String[] args) throws Exception{
//--------------------------------------------------------------------------------------------
        //仅仅测试一个代理类,代理时间的类的方法
        TimeProxy timeProxy = new TimeProxy();
       // timeProxy.run();
//---------------------------------------------------------------------------------------------

        //测试时间和日志同时代理的类,并且因为我们继承的关系是日志类继承时间类,故执行顺序唯一
        //如果要先代理时间,则需要时间代理类继承日志代理类
        LogProxy logProxy = new LogProxy();
        logProxy.run();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值