交通灯管理系统:
面向对象的分析和设计:谁拥有数据就对外提供操作方法
人在黑板上花圆:person blackboard circle
draw(){
x,y
}
StoneKinfe=KinfeFactory.createKnife(stone)
Stone
meterial=StoneKnife.cut(tree)
tree
char=ChairFactory.makeCharir(material)
material
chair
package traffic;
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 Lamp(String opposite, String next, boolean lighted) {
this.opposite = opposite;
this.next = next;
this.lighted = lighted;
}
private boolean lighted;
private String opposite;
private String next;
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) {
System.out.println("绿灯从" + name() + "------>切换为" + next);
Lamp.valueOf(opposite).blackOut();
}
Lamp nextLamp =null;
if (next != null) {
nextLamp=Lamp.valueOf(next);
nextLamp.light();
System.out.println("绿灯从" + name() + "------>切换为" + next);
}
return nextLamp;
}
}
package traffic;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class LampController {
private Lamp currentLamp;
LampController() {
currentLamp = Lamp.S2N;
currentLamp.light();
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("来了");
currentLamp = currentLamp.blackOut();
}
}, 2, 2, TimeUnit.SECONDS);
}
}
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.ArrayList.*;
import java.util.Random.*;
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<100;i++){
try{
Thread.sleep((new Random().nextInt(10)+1)*100);
}catch(Exception 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);
}
}
package traffic;
public class MainClass {
public static void main(String[] args) {
String []directions=new String[]{
"S2N","S2W","E2W","E2S","N2W","N2E","W2E","W2N","S2E","E2N","N2W","W2S"
};
for(int i=0;i<directions.length;i++){
new Road(directions[i]);
}
new LampController();
}
}