《交通灯管理系统》

 

 

    看了张老师的《破解交通灯管理系统》的视频,收获良多:

    1、了解了面向对象的设计方法,运用面向对象思想设计程序时,一个核心的要领是“谁拥有数据,谁就对外提供操作这些数据的方法”;

    2、通过学习项目,体验到编程除了知识和技术之外,还有另外一个维度:对各类知识和技术的整合;

    3、枚举在开发中的应用;

    4、线程池的使用。

    

    在理解了老师讲解的基础上,自己对问题又重新做了一番思考,产生了一个疑问:在交通灯管理系统中使用了多线程,也有共享数据,但老师并没有使用同步,我想可能是因为对于交通灯亮与灭的几十秒,程序内部因为没有同步产生的几微秒的误差是可以忽略不计的。

 

    同时在学习老师的代码的过程中发现可以对Lamp类进行一些简化:处于对称位置的两条行车路线可以共享同一个交通灯,例如南向北和北向南可以共享一个直行交通灯,所以对于12条行车路线只需要由6盏交通灯进行控制。重新设计过的Lamp类如下:

public enum Lamp {
    X_STRAIGHT("X_LEFT",10_000),    // 南北方向上的 直行 交通灯
    X_LEFT("Y_STRAIGHT",8_000),     // 南北方向上的 左转 交通灯
    
    Y_STRAIGHT("Y_LEFT",10_000),    // 东西方向上的 直行 交通灯
    Y_LEFT("X_STRAIGHT",8_000),     // 东西方向上的 左转 交通灯
    
    X_RIGHT,Y_RIGHT;    // 右转交通灯
    
    private String nextLamp;    // 后继交通灯
    private boolean lighted;    // 交通灯的状态
    private int time;           // 交通灯持续明亮的毫秒数,控制器据此设定灯亮的长短
    
    Lamp(String nextLamp, int time) {
        this.time = time;
        this.nextLamp = nextLamp;
    }
    Lamp() {
        this(null,0);
    }
    // 开灯
    public void turnOn() {
        lighted = true;
    }
    // 关灯
    public void turnOff() {
        lighted = false;
    }
    // 判断灯的状态
    public boolean isLighted() {
        return lighted;
    }
    // 获取后继交通灯
    public Lamp nextLamp() {
        return Lamp.valueOf(nextLamp);
    }
    // 获取交通灯持续明亮的时间
    public int getTime() {
        return time;
    }
    public void setTime(int time) {
        this.time = time;
    }
}

 

    学习项目给人一种与学习知识截然不同的体验,它一会儿要求人深入细节去实现具体功能,一会儿要求人跳出细节进行全局地把握。对于一个没有开发经验的新人,学习项目能让人对程序开发有一个更全面的了解,更能从牛人的代码中、老师的讲解中学到许多超越知识的东西。写到这里想起在黑马的课程中安排了许多大大小小的项目,不禁对未来有了更进一步的期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值