实现一个简单的漏桶算法

 look code

这是一个漏桶

package bucket;

public class LeakyBucket {
    //桶容量
    private int maxVolume;
    //流出速率
    private int maxOutSpeed;
    //当前容量
    private int volume;
    //当前流出量
    private int stream;

    public LeakyBucket() {
        this.maxVolume = 10;
        this.maxOutSpeed = 2;

        this.volume = 0;
        this.stream = 0;
    }

    //流入一滴水
    public boolean inputWater(){
        if (volume < maxVolume){
            volume++;
            return true;
        }
        return false;
    }

    //流出一滴水,添加一滴当前流出量
    public boolean outputWater(){
        if(volume >0){
            if (stream < maxOutSpeed){
                stream++;
                volume--;
                return true;
            }
            return false;
        }
        System.err.println("当前容量异常");
        return false;
    }

    //任务完成减少流量
    public void outSuccess(){
        stream--;
    }

}

这是测试类

package bucket;

public class TestController {

    //漏桶
    private static LeakyBucket leakyBucket= new LeakyBucket();

    public String testMethed(){
        //流入一滴水
        boolean b = leakyBucket.inputWater();

        //如果桶满流入失败直接反回
        if (!b){
            return "桶满了";
        }

        //执行任务前获取桶中的一滴水
        boolean b1 = leakyBucket.outputWater();
        //
        if (b1){

            System.out.println("执行任务");

            //任务执行完告诉漏桶
            leakyBucket.outSuccess();
            return "任务完成";
        }
        return "流量满了,抛弃你";
    }
}

哪里不足或可以改进的欢迎评论!

你可能感兴趣的:(学习)