内部类综合运用 温室的运作(策略模式)

事件的框架:

public abstract class Event
{
 private long eventTime;
 protected final long delayTime;
 public Event(long delayTime)
 {
  this.delayTime = delayTime;
  start();
 }
 public void start()
 {
  eventTime = System.nanoTime() + delayTime;
 }
 public boolean ready()
 {
  return System.nanoTime() >=eventTime;
 }
 public abstract void action();

}

控制器的类

import java.util.*;
public class Controller
{
 private List<Event> eventList = new ArrayList<Event>();
 public void addEvent(Event c)
 {
  eventList.add(c);
 }
 public void run()
 {
  while (eventList.size()>0)
  {
   for (Event e : new ArrayList<Event>(eventList) )
   {
    if (e.ready())
    {
     System.out.println(e);
     e.action();
     eventList.remove(e);
    }
   }
  }
 }
}

温室的控制类

public class GreenhouseControls extends Controller
{
 //灯光系统部分
 private boolean light = false;
 //控制灯光系统的内部类

 //开灯内部类


 public class LightOn extends Event
 {
  public LightOn (long delayTime)
  {
   super(delayTime);
  }
  public void action()
  {
   //打开电灯
   light = true;
  }
  public String toString()
  {
   return "Light is on";
  }
 }

 //关灯内部类


 public class LightOff extends Event
 {
  public LightOff (long delayTime)
  {
   super(delayTime);
  }
  public void action()
  {
   //关闭电灯
   light = false;
  }
  public String toString()
  {
   return "Light is off";
  }
 }

 //水利部分
 private boolean water = false;

 public class WaterOn extends Event
 {
  public WaterOn (long delayTime)
  {
   super(delayTime);
  }
  public void action()
  {
   water = true;
  }
  public String toString()
  {
   return "Water is on";
  }
 }

 public class WaterOff extends Event
 {
  public WaterOff (long delayTime)
  {
   super(delayTime);
  }
  public void action()
  {
   water = false;
  }
  public String toString()
  {
   return "Water is off";
  }
 }

 //温度控制


 private String thermostat = "Day";

 public class ThermostatNight extends Event
 {
  public ThermostatNight(long delayTime)
  {
   super(delayTime);
  }
  public void action()
  {
   thermostat = "Night";
  }
  public String toString()
  {
   return "Thermostat on night setting";
  }
  
 }

 public class ThermostatDay extends Event
 {
  public ThermostatDay(long delayTime)
  {
   super(delayTime);
  }
  public void action()
  {
   thermostat = "Day";
  }
  public String toString()
  {
   return "Thermostat on Day setting";
  }
  
 }

 //铃声系统

 public class Bell extends Event
 {
  public Bell(long delayTime)
  {
   super(delayTime);
  }
  public void action()
  {
   addEvent(new Bell(delayTime));
  }
  public String toString()
  {
   return "Bing";
  }
 }

 public class Restart extends Event
 {
  private Event[] eventList;
  public Restart(long delayTime,Event [] eventList)
  {
   super(delayTime);
   this.eventList = eventList;
   for(Event e : eventList)
   {
    addEvent(e);
   }
  }
  public void action()
  {
   for(Event e : eventList)
   {
    e.start();// Return each event
    addEvent(e);
   }
   start();//Return this Event
   addEvent(this);
  }
  public String toString()
  {
   return "Restarting system";
  }
 }
 public static class Terminate extends Event
 {
  public Terminate(long delayTime)
  {
   super(delayTime);
  }
  public void action()
  {
   System.exit(0);
  }
  public String toString()
  {
   return "Terminating";
  }
 }


 
}

温室的启动类

public class GreenhouseController
{
 public static void main(String args[])
 {
  GreenhouseControls gc = new GreenhouseControls();

  gc.addEvent(gc.new Bell(900));
  //让温室工作的时间列表
  Event[] eventList =
  {
   gc.new ThermostatNight(0),
   gc.new LightOn(200),
   gc.new LightOff(400),
   gc.new WaterOn(600),
   gc.new WaterOff(800),
   gc.new ThermostatDay(1400)
  };
  gc.addEvent(gc.new Restart(2000,eventList));
  if(args.length == 1)
  {
   gc.addEvent(new GreenhouseControls.Terminate(new Integer(args[0])));
   
  }
  gc.run();
 }
}

 

输出

Bing
Thermostat on night setting
Light is on
Light is off
Water is on
Water is off
Thermostat on Day setting
Restarting system
Terminating

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值