交通灯管业务系统

今天是7月12号,距离期末考完已经过去11天了,暑假早就打算留在南京实习了,但是一时半会都找不到单位,比较纠结,先前也面试了一家公司,但是这个公司必须要你先交钱在进行培训,否则就不给录取,所以我的面试就这样呗涮下来了。暑假就两个月,不想耽误时间为了尽快找份工作,就找了个服务员的工作,这份工作可把我累死了,每天工作至少11个半小时,几乎有9个小时是在外面不停地走,不停地送外卖的。所以一天下来很累。这个记笔记事业也给耽误了。

现在正在看移动资费系统视频,在回头看交通灯管系统这个项目的视频,这个系统的逻辑并不复杂,他与银行业务调度一样都是着重面向对象设计与分析的,总的来说并不是很难, 由于每天给人送外面,天天坐电梯,突发奇想,也想写一个电梯调度系统项目。 移动资费那个视频说老实话真的是很难,看都看不懂,云里雾里。钻进去了出不来了。

在进行面向对象设计时的思路是:一共多少个类; 每个类都有什么属性和方法; 类和类之间都有什么关系。 在就是张老师所要求掌握的:某个类具有哪些属性,他就有对外提供操作这些属性的方法。


Lamp.java

package cn.itcast.interview.traffice2;

public enum Lamp {
	
	S2N("N2S", "S2W", false), S2W("N2E", "E2W", false), E2W("W2E", "E2S", false), E2S("W2N", "S2N", false),
	N2S(null, null, false), N2E(null, null, false), W2E(null, null, false), W2N(null, null, false),
	S2E(null, null, true), E2N(null, null, true), N2W(null, null, true), W2S(null, null, true);
	
	//灯应该有一个属性:灯是不是绿的
	private boolean lighted;
	//相反方向的灯
	private String opposite;
	//当前路线下一条路线的灯
	private String next;
	
	private Lamp(String opposite, String next, boolean lighted) {
		this.opposite = opposite;
		this.next = next;
		this.lighted = lighted;
	}
	
	public boolean isLighted() {
		return lighted;
	}
	
	public void light() {
		this.lighted = true;
		if (opposite != null) {
			Lamp.valueOf(opposite).light();
		}
		System.out.println(name() + " lamp is green 下面共有六个方向能看到汽车穿过");
	}
	
	public Lamp blackOut() {
		this.lighted = false;
		if (opposite != null) {
			Lamp.valueOf(opposite).blackOut();
		}
		
		Lamp nextLamp = null; 
		if (next != null) {
			nextLamp = Lamp.valueOf(next);
			System.out.println("绿灯从" + name() + "------->切换为" + next);
			nextLamp.light();
		}
		return nextLamp;
	}
}

LampController.java
package cn.itcast.interview.traffice2;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class LampController {

	private Lamp currentLamp;
	
	public LampController() {
		this.currentLamp = Lamp.S2N;
		currentLamp.light();
		
		ScheduledExecutorService pool = Executors.newScheduledThreadPool(1);
		pool.scheduleAtFixedRate(
				new Runnable() {
					public void run() {
						currentLamp = currentLamp.blackOut();
					}
				}, 
				10,
				10,
				TimeUnit.SECONDS
				);
	}
}

Road.java

package cn.itcast.interview.traffice2;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Road {

	//路上有很多车, 这些车应都装在一个集合里
	private List<String> vehicles = new ArrayList<String>();
	//路应该有个名字在来标示是那条路线
	private String name;
	
	public Road(String name) {
		this.name = name;
		
		ScheduledExecutorService pool = Executors.newScheduledThreadPool(1);
		pool.execute(new Runnable() {
			public void run() {
				for (int i=1; i<1000; i++) {
					try {
						Thread.sleep(2000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					vehicles.add(Road.this.name + " _" + i);
				}
			}
		});
		
		ScheduledExecutorService pool2 = Executors.newScheduledThreadPool(1);
		pool2.scheduleAtFixedRate(
				new Runnable() {
					public void run() {
						if (vehicles.size() > 0) {
							boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
							if (lighted) {
								System.out.println(vehicles.remove(0) + " : is passing");
							}
						}
					}
				},
				1, 
				1,
				TimeUnit.SECONDS
				);
	}
}

MainClass.java

package cn.itcast.interview.traffice2;

public class MainClass {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String[] directions = new String[] {
				"S2N", "S2W", "E2W", "E2S", "N2S", "N2E", "W2E", "W2N", "S2E", "E2N", "N2W", "W2S"
		};
		
		for (int i=0; i<directions.length; i++) {
			new Road(directions[i]);
		}
		
		new LampController();
	}

}





你可能感兴趣的:(交通灯管业务系统)