交通等管理系统的学习


一:面向对象的设计经验:谁拥有数据,谁就对外提供操作这些数据的方法。

对象分析:路、灯、控制器

1.路的分析:

                       经过分析一个十字路口一共有十二个方向的车流,而且可以分成是五种情况:南北向、东西向、南北左拐、东西左拐、右拐。。其中右拐不受交通灯控制。

                       路上有车(用一个集合表示,集合大小不确定,用随机数生成)

                       如果此路上的控制灯是绿灯则放行。

2.灯的分析:

                       是一个枚举类型,不允许随便声明其对象。

                       当它变红时,让下一个灯变绿。

 public void Green(){
  this.lighted=true;
  if(brotherLamp!=null){
   Lamp.valueOf(brotherLamp).Green();
  }
 }

 

public Lamp Red(){
  this.lighted=false;
  if(brotherLamp!=null){
   Lamp.valueOf(brotherLamp).Red();
  }
  Lamp nextLamp = null;  //这里一定要注意逻辑问题
  if (nextGreanLamp!=null) {
   nextLamp=Lamp.valueOf(nextGreanLamp);
   nextLamp.Green();
   System.out.println("下一个要亮的灯是:"+nextGreanLamp);
  }
  return nextLamp;
 }

3.控制器的分析:

                       启动一个交通灯。

                       要每隔一段时间改变灯的颜色(是否允许通行)。

package com.itheima.preparation.traffic;

import java.util.concurrent.*;
public class LampController {
 private Lamp nowLamp;
 
 public LampController(){
  System.out.println("交通灯控制系统已经启动!");
  
  nowLamp=Lamp.S2N;
  nowLamp.Green();
  
  ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
  timer.scheduleAtFixedRate(
    new Runnable() {
     @Override
     public void run() {
      nowLamp=nowLamp.Red();
     }
    },
    10,
    10,
    TimeUnit.SECONDS);
 }
}

 

二:接口是不能直接new的,而在new之后添加一个大括号就是new的它的一个实现类!如:

ExecutorService pool = Executors.newSingleThreadExecutor();

Pool.execute(new Runnable(){

实现接口的方法。

});

三:内部类要使用外部类的局部变量,外部类的局部变量要加final;如果调用外部类的成员变量要用外部类的名字+this+变量名,如:Road.this.name

写的不是很好,欢迎与您一起探讨!

你可能感兴趣的:(java,android,timer,null,交通)