不止一遍的看了视频,觉得跟这老师走思路虽然清晰但是对自己的能力提升有限,今天写了这个博客来自己完成这个交通灯管理系统
银行业务调度系统模拟银行调度系统逻辑。需求:
- 银行内有6个业务窗口,1-4为普通窗口,5为快速窗口,6为VIP窗口。
- 有三种类型客户:VIP客户,快速客户(交水电费类业务),普通客户。
- 一部随机生成各种类型的客户,概率比例为:VIP客户:快速客户:普通客户 = 1:3:6。
- 客户办理用时设定最少时间。
- 各类型客户在其对应窗口按照顺序办理业务。
- VIP和快速窗口无办理业务时刻受理普通客户,若有应该优先处理对应客户。
客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。各类型客户在其对应窗口按顺序依次办理业务。
面向对象是一种很好的编程思想,面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。面向对象的三大特点:继承、封装、多态。
利用面向对象编程可以更好的的理解事情。从而达到简化编程的目的。
从面向对象的角度分析 我们只要设计三个类:Road,Lamp,LampControler。
Road类可设计为一个容器,里面存放着数据,比如车。按照谁拥有数据谁就拥有对这些数据操作的方法这样一个面向对象的原则(处处体现出面向对象的封装性)。我们知道,road类里必须要提供车子的增加和减少的方法,list类里提供了很多对数据的增删改查操作。设计为list方便而且准确。
Lamp类应该设计为枚举类型。因为我们知道,一个十字路口车可以行使的路线最多有12条!而且这12条路线是确定的,不能由用户随意更改,所以应该设置为枚举。我们认真的缕下思路会结合现实生活中的交通灯发现:四条右拐的路线根本不需要看交通灯可随时通过(可看做是灯为常绿),而且剩余的八条具有对称性,这是我们只需要考虑四个灯就可以了,更好的简化了编程。可以这样设计Lamp,每个Lamp(只考虑四灯)都有一个相对的灯opposite和相邻的灯next,当然还有自身灯亮的情况,于是只要在类中提供对这些数据操作的方法变好了。
这里借用张老师的一张图来更好的说明:
LampControler为控制lamp的类。在其中要启动一个线程专门来管理lamp。我们应尽量使用jdk1.5的新特性,比如产生线程池和调度线程
ScheduledExecutorService timer= Executors.newScheduledThreadPool(1);
timer.scheduleWithFixedDelay(
new Runnable(){
public void run() {
}
},
1,
1,
TimeUnit.SECONDS);
在以后的编程中我要锻炼自己的面向对象的思维能力。