----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
看过了张孝祥老师的交通等管理系统,觉得这个一个很好的实例,通过解决实际问题,从实际问题中抽象出对象和模型,现将自己的学习总结如下:
抽象+建模:解决实际问题,通常都是首先要分析实际问题,从实际问题中抽象出类,并对这些类建立方法。以及一个很好的参考点就是谁拥有数据,谁就需要提供方法。在交通灯管理系统中建立了三个类:
1. Road类:这个类是这个程序的基础,后续两个类觉得都是根据这个的需要来生成的。在这个类中将传统的十字路口抽象细分为12条路,这个设计为后面的分析定下了个基础,然后在Road类中使用ArrayList来组织路上的汽车,路上的汽车必然需要有进入该Road和离开该Road,针对“进入该Road” 创建一个线程来随机产生汽车,并添加到ArrayList中,针对“离开该Road”也创建一个线程来将汽车从ArrayList中remove掉,而这个remove不是随机,需要在该Road对应的灯为绿灯或者亮着的,那么这就自然想到了灯这个类,并且Lamp类至少需要提供亮灯、灭灯和获取灯的状态方法。
2. Lamp类:觉得Lamp类是该题的亮点,为12条Road对象,建立对应的12个Lamp对象,这样每个Road获取自己对应的Lamp数据。在Lamp枚举类中将12个Lamp对象,分析到最后只关注4组Lamp对象,这个大大简化了程序的设计,觉得这个是点睛(另外一个就是LampController中的currentlamp),使用opposite减掉4组,又通过常绿的减掉4组,最后就只是关注4组Lamp对象。而这4组灯的状态的转换通过next完成,这个next也是点睛的一个域,这样就类似创建了一个循环的状态机。关于Lamp类的设计的确是很赞,从实际的交通灯中抽象出Lamp类,并通过opposite和next来简化流程。
3. LampController类:该类是来控制Lamp变化的类,这个类之所以能比较简单,觉得还是因为Lamp类设计的漂亮~。在这个类中使用了一个currentlamp来指向当前亮着的灯,觉得java中没有指针的,但指针的思想一直是存在的,对象的引用嘛~
总结:该实例很有意义,经过这次学习,感觉对面向对象的思想又有了深一步的理解。抽象和建模(算法)需要经过大量的实际练习来提高这方面的能力和意识、感觉!
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
黑马程序员--交通灯管理系统的学习,布布扣,bubuko.com
原文:http://www.cnblogs.com/zhblucky/p/3617846.html