黑马程序员——交通灯管理系统学习总结

今天用了一个上午的时间看了张孝祥老师的“交通灯管理系统“的视频讲解,之所以没有先看之前的知识点的教学视频而直接看项目的教学视频,一是因为自己有一定的JAVA基础,二也是最重要的是,通过四年的大学学习,了解“实践才是检验真理的唯一标准”这句话的正确性,通过具体的项目把知识点串联起来,然后发现没有掌握的地方再重点突破,我感觉这种方法比起一开始便扎进细小的知识点学习中要好得多。闲话说完,开始总结。

交通灯管理系统的需求简单,直观来说,就是编程实现——车辆看到绿灯前进(转弯),看到红灯停下,且红绿灯有规律的轮流切换。在张老师讲解需求的时候,特别提到了面向对象分析问题的方法——谁拥有数据,谁就对外提供操作这些数据的方法。用不同的方式把现实的问题转换为编程的对象,自然就会使编程复杂度变得不同,而恰当的面向对象的设计方法无疑会使实现变得事倍功半。根据分析,系统中存在四个对象,交通灯,交通灯控制器,路,车辆(此类不需要),按照我之前的思维方式,”交通灯控制器“这个对象的内容我会直接放在主函数方法中,不会再另外用类封装起来,但事实证明,把”交通灯控制器“作为一个单独的类较好,一是主函数中不适合有逻辑代码,封装起来后直接调用即可,二是复用性提高,不能总是为了完成任务而完成任务,而应该考虑到之后的系统升级,优化,更改参数等一系列的问题。

然后是编程的实现,用了一上午看完视频其实没什么感觉,直到下午亲自动手把代码一个一个敲出来后才发现有许多知识点似是而非。首先编写的便是Road类,此类要做两件事——第一:在每条路上不断的添加车辆;第二:在这条路对应的灯变绿时释放车辆(先进先出原则)。首先学习到的便是Executors类的使用,其中包括线程池和定时器的使用,虽然可以用旧的创建线程的方法实现,但新的方法更有效且方便,何乐而不为呢?

ExecutorService线程池的使用:

ExecutorService pool = Executors.newSingleThreadExecutor();
		pool.execute(new Runnable() {
			public void run() {
				//do something
			};
		});

ScheduledExecutorService定时器的使用:

ScheduledExecutorService timer =Executors.newScheduledThreadPool(1);
		timer.scheduleAtFixedRate(
				new Runnable(){
					public void run(){
						//do something
					};
				},
				T1,//经过T1时间后开始
				T2,//每隔T2时间重复进行
				unit);//时间单位,分,秒等
	}
除了以上两个方法的学习外,我自己写的Road类和老师写的也有不同,我把此类中要做的两件事——添加车辆和释放车辆,分别写在了两个不同的方法里面,而老师是把这两个操作都写在构造方法里面,区别就是我新建Road类实例后必须再调用这两个方法,而老师的实例在新建后便自动进行这两个操作。


然后编写的是Lamp类,使用了枚举类型,因为之前基本都没使用过枚举,所以在讲解这里的时候特别注意了一下,了解了枚举的使用,特别是掌握了一个技巧——A枚举中引用了B枚举,如果在B还没有声明之前就声明A会报错,解决办法是A枚举中引用B枚举的名字(字符串),通过enum.valueOf(name)来构造出需要的枚举对象


LampController类是交通灯的控制器,用于控制不同灯的红绿转换,此类中也用到了ScheduledExecutorService定时器,不得不说这个定时器真是好用,比Timer好用多了。


敲完代码后运行遇到个小问题,报错为找不到enum对象,因为对枚举不熟,一开始也不知道问题出自何处,根据报错一步一步找,最后发现原来是valueOf(name)写成了valueOf(”name“),把变量名当字符串传给参数了,改好后运行,成功!

通过这个项目,学习到如下的内容(已经掌握的就不提了):

1:面向对象的设计方法——谁拥有数据,谁就对外提供操作这些数据的方法。

2:Executors类的使用,包括ExecutorService线程池的使用和ScheduledExecutorService定时器的使用。

3:枚举类型的基本用法和技巧——通过enum.valueOf(name)来构造出需要的枚举对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值