黑马程序员 - 交通灯问题

 

------ <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

 

一:面向对象的设计经验:

谁拥有数据,谁就对外提供操作这些数据的方法。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值