黑马程序员-----交通灯管理系统

来源:互联网 发布:组态软件控制系统 编辑:程序博客网 时间:2024/05/18 00:54
------- android培训java培训、期待与您交流! ----------

面向对象设计

人在黑白上画圆

存在3个对象,人,黑板,圆

Person blackboard circle

draw()是画圆的方法,因该归属到哪个对象?

一般情况,做出画圆的这个动作应该属于人这个对象!可是:

draw()需要用到圆心,半径,这些变量都是Circle对象的,所以,draw()属于circle

这是Java的设计方式,不同于广义函数,方法不属于对象,而是独立存在的函数,由参数类型决定操作的对象,这种面向对象在在设计上更加灵活也更容易解释


两块石头磨成一把刀,石刀可以砍树,砍成木材,木材做成梯子

这里有5种类型对应5类对象---->石头,刀,树,木材,梯子

其中石头-刀,树-木材-梯子的关系不是操作关系,而是从一种形态到另一种形态,石头做成了刀,石头就没了只剩下刀了,所以应采用Factory模式。建立一个KnifeFactory类包含有makeKnife()方法,传入两个stone对象,返回一个knife对象。树-木材-梯子之间的关系也是如此


交通灯管理系统的设计

一个十字路口总共有12种方向,其中4个常通,两外8个两两相对,所欲需要12个交通灯对象来控制车辆行驶,由于4个是常亮的,另外8个两两相对,所以实际参与逻辑运算的只有4个

系统中总共需要2种对象,路、灯。灯可以适用枚举

 

public enum Lamp

 

需要12种枚举对象表示12个灯

 

S2N,S2W,E2W,E2S,N2S,N2E,W2E,W2N,S2E,E2N,N2W,W2S

使用构造方法来指定于灯对象相对的灯,下一个会亮的灯以及是否两着

private Lamp(String opposite,String next,boolean lighted)

建立2个方法,亮灯和熄灯

 

public void light()

亮灯--->会连着与之相对的灯一起亮,例如南到北相对是北到南

 

public Lamp blackOut()

熄灯---->也会连着与之相对的灯一起熄灭,并且点亮下一盏灯,并返回下一盏灯枚举对象


 

public class Road 

路需要一个集合来保存字符串类型的车辆

 

private List<String> wheels= new ArrayList<String>();

在构造方法种加入线程执行器

 

xecutors.newSingleThreadExecutor().execute(new Runnable(){}

管理车辆的加入

 

Thread.sleep((new Random().nextInt(10) + 1) * 1000);

每隔1到10秒之间加入一辆新等待的车辆(随机数其实也就差不多5秒左右来一辆)

和线程调度器分别管理车辆的加入和监控红绿灯情况释放车辆

 

Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){...}1,1,TimeUnit.SECONDS);

每秒监控红绿灯

只要一建立Road对象,就会实现线程监控调度


最后需要建立一个控制器,建立另一个线程调度器每隔10秒换一次灯

 

public class LampController......Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){...}10,10,TimeUnit.SECONDS);

系统基本完成











-------  android培训、java培训、期待与您交流! ----------

  详细请查看:http://edu.csdn.net/heima/
原创粉丝点击