前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式——动态代理

设计模式——动态代理

作者头像
mathor
发布2018-09-19 15:23:59
4110
发布2018-09-19 15:23:59
举报
文章被收录于专栏:mathormathor

 先写一个小程序,打印一句话"Moving",然后让主线程sleep10000毫秒以内的一个随机值

//Moveable接口
public interface Moveable {
    public void move();
}
//Tank类
import java.util.Random;

public class Tank implements Moveable{

    @Override
    public void move() {
        System.out.println("Tank Moving...");
        try {
            Thread.sleep(new Random().nextInt(10000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 下面记录一下Tank类执行的时间,用到System.currentTimeMills()方法

//Tank类
import java.util.Random;

public class Tank implements Moveable{

    @Override
    public void move() {
        long start = System.currentTimeMillis();
        System.out.println("Tank Moving...");
        try {
            Thread.sleep(new Random().nextInt(10000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        long end = System.currentTimeMillis();
        System.out.println("Time:" + (end - start));
    }
}

 实际上这还并不是达到要求的方法,要求的是记录整个Tank类中move方法的运行时间(很明显,这记录的只是move方法一部分的运行时间),要想记录很简单,设置一个代理,由这个代理访问Tank的move方法,然后在这个move方法的上下用System.currentTimeMilis()包裹。  设置代理又分两种方法,一种是通过继承,继承这个Tank类,然后调用move方法。另一种是通过实现Moveable接口,但是获得Tank类的对象,然后通过这个对象访问Tank的move方法  先说第一种方法

//Tank2继承Tank类
public class Tank2 extends Tank{

    @Override
    public void move() {
        long start = System.currentTimeMillis();
        super.move();
        long end = System.currentTimeMillis();
        System.out.println("Time:" + (end - start));
    }    
}

 第二种方法

//Tank3实现Moveable接口
public class Tank3 implements Moveable{
    Tank t;
    Tank3(Tank t) {
        super();
        this.t = t;
    }
    @Override
    public void move() {
        long start = System.currentTimeMillis();
        t.move();
        long end = System.currentTimeMillis();
        System.out.println("Time:" + (end - start));
    }
}

 上面第一种方法,叫继承,第二种方法,叫聚合

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档