java 交通灯

 

交通灯管理系统:
面向对象的分析和设计:谁拥有数据就对外提供操作方法
人在黑板上花圆: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();
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值