黑马程序员-----交通灯管理系统
来源:互联网 发布:组态软件控制系统 编辑:程序博客网 时间:2024/05/18 00:54
面向对象设计
人在黑白上画圆
存在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);
系统基本完成
详细请查看:http://edu.csdn.net/heima/
- 《黑马程序员》交通灯管理系统
- 黑马程序员----交通灯管理系统
- <黑马程序员>交通灯管理系统
- 【黑马程序员】交通灯管理系统
- 黑马程序员 交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员--交通灯管理系统
- 《黑马程序员》交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员:交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员 交通灯管理系统
- 黑马程序员-交通灯管理系统
- 黑马程序员-交通灯管理系统
- 黑马程序员-------交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员-交通灯管理系统
- 请小心!这三种创业不靠谱
- 10款简约风格的免费WordPress Thems
- 12 个有效的提高编程技能的方法
- Linux目录架构详解 转自http://cloud.csdn.net/a/20120420/2804821.html?bsh_bid=90555089###
- 有道云笔记新版上线 深化本土应用合作
- 黑马程序员-----交通灯管理系统
- 关于青春
- cvGetSize与cvSize的区别
- Java中对象的复制/拷贝
- 第二章 变量和基本类型 (续1) 变量 & const 限定符
- socket
- 黑马程序员-----代理
- 配置Log4j(很详细)
- 红尘依梦