黑马程序员3--交通灯管理系统
2012-05-13 18:55
267 查看
---------------------- android培训、java培训、期待与您交流! ----------------------
交通灯管理系统
模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:
异步随机生成按照各个路线行驶的车辆。
例如:
由南向而来去往北向的车辆 ---- 直行车辆
由西向而来去往南向的车辆 ---- 右转车辆
由东向而来去往南向的车辆 ---- 左转车辆
。。。
信号灯忽略黄灯,只考虑红灯和绿灯。
应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。
每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。
随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。
不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
分析:做题前要先分析有哪些对象,个对象之间的关系(方法运行时,是否调用数据,以及数据归属)。
我开始认为:车是一个对象,拥有移动的方法(路传给一个点,和此时的灯的状态),和往哪移(初始化给一个方向),把十子路口比成x轴y轴,
直行时判断(x,y)不为零的值,是否由负数变正数,或由正数变负数。
转弯时判断(x,y)不为零的值,是否变化。
然后再让一个可以产生汽车的工厂(随机产车)
这样写下去会非常繁琐,直到后来写不出来。
看到老师写的代码时,才明白高手是什么概念(佩服)
老师把车当成了路的数据,路提供操作数据的方法(减少车,增加车),而每个路有自己的方向,自己的灯的状态,自己的车。
这样一下子就简化了模型,简化了设计的复杂程度。
在老师视频中学到了面向对象的分析与设计
面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。再牢牢掌握几个典型的案例就可以了:人在黑板上画圆,列车司机紧急刹车,售货员统计收获小票的金额,你把门关上了等。(经典呀)看到这个我恍然大悟,原来面向对象可以这么玩。
我感觉这句话的收获,比这个交通灯的例子还要大。
下面就说一下老师的代码:
三部分;load,lamp,lampController
load
构造函数初始化传一个路的名字,并随机造车(为了避免构造函数长时间初始化,开了一个线程)
灯有判断是否亮的方法(用定时器实现)。
lamp
利用了枚举
构造函数(必须私有)传入(对面的灯,下一个灯,灯的状态)
(当传入的是一个枚举对象时,而枚举对象还没有,用字符串代替)
只有四个灯具有对面的灯和下一个灯,
灯有变亮(把对面的灯变亮,判断是否有对面的灯),变暗的方法(把对面的方法变暗,同时把下一个灯变亮)
lampController
用一个变量记住当前变亮的灯。
通过初始化,让一个灯变亮,
用一个定时器,过多少时间就让他变暗。
如何获取下一个变亮的灯呢
老师用到了调用变暗的方法时以返回值的形式,
这样既调了方法又赋值(很巧妙)
---------------------- android培训、java培训、期待与您交流! ----------------------
交通灯管理系统
模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:
异步随机生成按照各个路线行驶的车辆。
例如:
由南向而来去往北向的车辆 ---- 直行车辆
由西向而来去往南向的车辆 ---- 右转车辆
由东向而来去往南向的车辆 ---- 左转车辆
。。。
信号灯忽略黄灯,只考虑红灯和绿灯。
应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。
每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。
随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。
不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
分析:做题前要先分析有哪些对象,个对象之间的关系(方法运行时,是否调用数据,以及数据归属)。
我开始认为:车是一个对象,拥有移动的方法(路传给一个点,和此时的灯的状态),和往哪移(初始化给一个方向),把十子路口比成x轴y轴,
直行时判断(x,y)不为零的值,是否由负数变正数,或由正数变负数。
转弯时判断(x,y)不为零的值,是否变化。
然后再让一个可以产生汽车的工厂(随机产车)
这样写下去会非常繁琐,直到后来写不出来。
看到老师写的代码时,才明白高手是什么概念(佩服)
老师把车当成了路的数据,路提供操作数据的方法(减少车,增加车),而每个路有自己的方向,自己的灯的状态,自己的车。
这样一下子就简化了模型,简化了设计的复杂程度。
在老师视频中学到了面向对象的分析与设计
面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。再牢牢掌握几个典型的案例就可以了:人在黑板上画圆,列车司机紧急刹车,售货员统计收获小票的金额,你把门关上了等。(经典呀)看到这个我恍然大悟,原来面向对象可以这么玩。
我感觉这句话的收获,比这个交通灯的例子还要大。
下面就说一下老师的代码:
三部分;load,lamp,lampController
load
构造函数初始化传一个路的名字,并随机造车(为了避免构造函数长时间初始化,开了一个线程)
灯有判断是否亮的方法(用定时器实现)。
lamp
利用了枚举
构造函数(必须私有)传入(对面的灯,下一个灯,灯的状态)
(当传入的是一个枚举对象时,而枚举对象还没有,用字符串代替)
只有四个灯具有对面的灯和下一个灯,
灯有变亮(把对面的灯变亮,判断是否有对面的灯),变暗的方法(把对面的方法变暗,同时把下一个灯变亮)
lampController
用一个变量记住当前变亮的灯。
通过初始化,让一个灯变亮,
用一个定时器,过多少时间就让他变暗。
如何获取下一个变亮的灯呢
老师用到了调用变暗的方法时以返回值的形式,
这样既调了方法又赋值(很巧妙)
---------------------- android培训、java培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员23.交通灯管理系统
- 黑马程序员_7k面试_交通灯管理系统
- 黑马程序员---交通灯管理系统
- 黑马程序员_java_基础加强_模拟交通灯管理系统
- 【黑马程序员】交通灯管理系统_学习笔记
- 【黑马程序员】交通灯管理系统
- 黑马程序员——交通灯管理系统
- 黑马程序员—(JAVA)交通灯管理系统
- 黑马程序员-Java基础学习之交通灯管理系统
- 黑马程序员——交通灯管理系统
- 黑马程序员 交通灯管理系统
- 黑马程序员_交通灯管理系统
- 黑马程序员 Java基础 --->7K面试题之交通灯管理系统
- 黑马程序员_7K月薪面试题破解之一_交通灯管理系统
- 黑马程序员十、交通灯管理系统
- 黑马程序员--13交通灯管理系统
- 黑马程序员-交通灯管理系统
- 黑马程序员 交通灯管理系统
- 黑马程序员Java -- 交通灯管理系统案总结
- 黑马程序员 交通灯管理系统的分析与理解