public class Road {
private List<String> vechicles = new ArrayList<String>();
private String name = null;
public Road(String name) {
this.name = name;
//模拟车辆不断随机上路的过程
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable() {
public void run() {
for (int i = 1; i < 1000; i++) {
try {
Thread.sleep((new Random().nextInt(10) + 1) * 10);
} catch (InterruptedException e) {
e.printStackTrace();
}
vechicles.add(Road.this.name + "_" + i);
}
}
});
//每隔一秒检查对应的灯是否为绿,是则放行一辆车
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable() {
public void run() {
if (vechicles.size() > 0) {
boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
if (lighted) {
System.out.println(vechicles.remove(0)
+ " is traversing");
}
}
}
}, 1, 1, TimeUnit.SECONDS);
}
}
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 Lamp(String oppsite,String next,boolean lighted){
this.oppsite = oppsite;
this.next = next;
this.lighted = lighted;
}
private Lamp(){
}
private boolean lighted;
private String oppsite;
private String next;
public boolean isLighted(){
return lighted;
}
public void light(){
this.lighted = true;
if(oppsite!= null)
Lamp.valueOf(oppsite).light();
System.out.println(name() + " lamp is green,下面总共应该有6个方向的汽车通过");
}
public Lamp balckOut(){
this.lighted = false;
if(oppsite != null){
Lamp.valueOf(oppsite).balckOut();
}
Lamp nextLamp = null;
if(next != null){
nextLamp=Lamp.valueOf(next);
System.out.println("绿灯从" + name() + "--->切换为" + next);
nextLamp.light();
}
return nextLamp;//返回下一个灯
}
}
private Lamp currentLamp;
public LampContoller(){
currentLamp = Lamp.S2N;
currentLamp.light();
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
currentLamp = currentLamp.balckOut();
}
},
10,
10,
TimeUnit.SECONDS);
}
}
COMMON,EXPRESS,VIP;
public String toString(){
switch (this) {
case COMMON:
return "普通";
case EXPRESS:
return "快速";
case VIP:
return "VIP";
}
return null;
}
}
private int lastNumber=1;
private List<Integer> queueNumber = new ArrayList<Integer>();
public synchronized Integer generateNewManager(){
queueNumber.add(lastNumber);
return lastNumber++;
}
public synchronized Integer fetchServiceNumber(){
Integer number = null;
if(!queueNumber.isEmpty())
number = queueNumber.remove(0);
return number;
}
}
private NumberManager commonManager = new NumberManager();
private NumberManager expressManager = new NumberManager();
private NumberManager vipManager = new NumberManager();
public NumberManager getCommonManager() {
return commonManager;
}
public NumberManager getExpressManager() {
return expressManager;
}
public NumberManager getVipManager() {
return vipManager;
}
private NumberMachine(){}
public static NumberMachine getInstance(){
return instance;
}
private static NumberMachine instance = new NumberMachine();
}
public class ServiceWindow {
private CustomerType type = CustomerType.COMMON;
private int windowId = 1;
public void setType(CustomerType type) {
this.type = type;
}
public void setWindowId(int windowId) {
this.windowId = windowId;
}
public void start(){
Executors.newSingleThreadExecutor().execute(new Runnable(){
@Override
public void run() {
while(true){
switch (type) {
case COMMON:
commonServie();
break;
case EXPRESS:
expressServie();
break;
case VIP:
vipServie();
break;
}
}
}
});
}
}
两个系统本身都没有十分复杂的逻辑关系,也不存在复杂的算法。重要的是如何分析和设计各个类,然后让它们配合起来运作。
---------------------- android培训、java培训、期待与您交流!
----------------------详细请查看:http://edu.csdn.net/heima