黑马程序员 改进版交通管理系统
???? -------?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() {@Overridepublic 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辆车通过?