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

     ------- 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辆车通过
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值