`
learen
  • 浏览: 10669 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员 改进版交通管理系统

阅读更多

     ------- 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辆车通过
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics