------- android培训、java培训、期待与您交流! ----------
通过观看张孝祥老师的视频,发现他把对灯的控制代码写到了灯的类里面,自认为不妥,于是进行代码分离,将控制代码分离到了灯的控制类里面,下面贴出灯的控制器代码
public class LampController { private ScheduledThreadPoolExecutor sch; private LinkedList<Lamp[]> groups; private Lamp[] current; public LampController() { this.groups = new LinkedList<Lamp[]>(); sch = new ScheduledThreadPoolExecutor(1); init(); this.current = nextGroup(); changeGreen(current); } public void schedule(){ // 每隔10s将当前灯变黑,下一个灯变亮 sch.scheduleAtFixedRate(new Runnable() { @Override public void run() { changeRed(current); current = nextGroup(); changeGreen(current); } }, 10, 10, TimeUnit.SECONDS); } private void init(){ Lamp[] group1 = {Lamp.南向北,Lamp.北向南}; Lamp[] group2 = {Lamp.南向西,Lamp.北向东}; Lamp[] group3 = {Lamp.东向西,Lamp.西向东}; Lamp[] group4 = {Lamp.东向南,Lamp.西向北}; groups.add(group1); groups.add(group2); groups.add(group3); groups.add(group4); } private Lamp[] nextGroup(){ Lamp[] group = groups.removeFirst(); groups.addLast(group); return group; } private void changeGreen(Lamp[] lamps) { for(Lamp lamp : lamps) lamp.changeGreen(); } private void changeRed(Lamp[] lamps) { for(Lamp lamp : lamps) lamp.changeRed(); }
这样灯类的代码得到简化,实现了单一性原则
public enum Lamp { 南向北,北向南, 南向西,北向东, 东向西,西向东, 东向南,西向北; private boolean flag; public boolean isLight() { return this.flag; } public void changeGreen() { this.flag = true; System.out.println(name() + "灯变绿"); } public void changeRed() { this.flag = false; System.out.println(name() + "灯变红"); } }运行结果
南向北灯变绿 北向南灯变绿 北向南路线上的第1辆车通过 南向北路线上的第1辆车通过 北向南路线上的第2辆车通过 南向北灯变红 北向南灯变红 南向西灯变绿 北向东灯变绿 北向东路线上的第1辆车通过 南向西路线上的第1辆车通过 南向西路线上的第2辆车通过 南向西路线上的第3辆车通过 北向东路线上的第2辆车通过 南向西路线上的第4辆车通过 南向西灯变红 北向东灯变红 东向西灯变绿 西向东灯变绿 东向西路线上的第1辆车通过 西向东路线上的第1辆车通过 西向东路线上的第2辆车通过 东向西路线上的第2辆车通过 西向东路线上的第3辆车通过 西向东路线上的第4辆车通过 西向东路线上的第5辆车通过 东向西路线上的第3辆车通过 东向西路线上的第4辆车通过 东向西灯变红 西向东灯变红 东向南灯变绿 西向北灯变绿 东向南路线上的第1辆车通过 西向北路线上的第1辆车通过 西向北路线上的第2辆车通过 东向南路线上的第2辆车通过 西向北路线上的第3辆车通过 东向南路线上的第3辆车通过 东向南路线上的第4辆车通过 西向北路线上的第4辆车通过 东向南路线上的第5辆车通过 西向北路线上的第5辆车通过 东向南路线上的第6辆车通过 东向南路线上的第7辆车通过 东向南灯变红 西向北灯变红 南向北灯变绿 北向南灯变绿 南向北路线上的第2辆车通过 北向南路线上的第3辆车通过 南向北路线上的第3辆车通过 北向南路线上的第4辆车通过 南向北路线上的第4辆车通过 北向南路线上的第5辆车通过 南向北路线上的第5辆车通过 北向南路线上的第6辆车通过 南向北路线上的第6辆车通过 北向南路线上的第7辆车通过 南向北路线上的第7辆车通过 北向南路线上的第8辆车通过 南向北路线上的第8辆车通过 北向南路线上的第9辆车通过 北向南路线上的第10辆车通过 北向南路线上的第11辆车通过 北向南路线上的第12辆车通过 南向北灯变红 北向南灯变红 南向西灯变绿 北向东灯变绿 南向西路线上的第5辆车通过 北向东路线上的第3辆车通过 南向西路线上的第6辆车通过 北向东路线上的第4辆车通过 南向西路线上的第7辆车通过 北向东路线上的第5辆车通过 南向西路线上的第8辆车通过 北向东路线上的第6辆车通过 北向东路线上的第7辆车通过 南向西路线上的第9辆车通过 南向西路线上的第10辆车通过 南向西路线上的第11辆车通过 南向西路线上的第12辆车通过 南向西路线上的第13辆车通过 北向东路线上的第8辆车通过 南向西灯变红 北向东灯变红 东向西灯变绿 西向东灯变绿 西向东路线上的第6辆车通过 东向西路线上的第5辆车通过 东向西路线上的第6辆车通过 西向东路线上的第7辆车通过 东向西路线上的第7辆车通过 西向东路线上的第8辆车通过 东向西路线上的第8辆车通过 西向东路线上的第9辆车通过 东向西路线上的第9辆车通过 西向东路线上的第10辆车通过
相关推荐
这是一个人员管理系统,适合学习了struts2 的同学练习基础,了解开发流程
黑马程序员JavaEE49期
正在自学黑马程序员Java全套,目前只学了Javase,接下来是Javaweb,把自己整理的笔记分享一下。
黑马程序员网上图书商城中的毕业设计资料,代码,数据库设计论文等
黑马程序员Javaweb教材源代码,适合学习配套使用
黑马程序员——Android移动开发源码
《JavaWeb程序设计任务教程》一书源代码,中国工信出版社出版,黑马程序员编著,传智播客旗下高端教育品牌“黑马程序员”项目实战配套用书
黑马程序员,C++核心编程
黑马程序员c++配套课件 《轻松搞定c++语言》 黑马程序员c++配套课件 《轻松搞定c++语言》
基于javaEE与MVC模式,图书馆管理系统,数据库为sql2000,有数据库备份文件,服务器为tomcat,用连接池连接方式。(有简要的小文档)
Javaweb基础全课程笔记,黑马程序员上课笔记,主要涉及前端 jsp和servlet等
B站黑马程序员Python教程学习笔记
黑马程序员入学面试题,复习必备,事半功倍。
layui ajax 没有node.js功能都可用,高度类似。 黑马刘龙彬老师主讲的大事件项目,整体看完,给...最后,再次给黑马程序员和刘老师点个赞。 说明--ShowDoc https://www.showdoc.com.cn/escook?page_id=3707158761215217
黑马程序员匠心之作 C++教程讲义,适合初学者,视频教程全程无废话
第六章,关于在pycharm中编写名片管理系统演示案例。其中包括源代码。
本人参加黑马程序员考试的题目加上本人的解答!不是让谁作弊,因为题库的题目对每个人会有些许的变化。题库题目的难度很类似,就当是你参加模拟考试了!哈哈,附本人的详解的哦!
Java-IO流高级-例题 & 例题源码 & PPT教学文档(黑马程序员详细版)。
安卓黑马程序员课表
月薪过万的入门必知知识,黑马程序员入学Java精华总结