控制器抽象层,包括抽象事件的定义及控制器的定义:
public abstract class Event {
private long eventTime;
protected final long delayTime;
public Event(long delayTime) {
this.delayTime = delayTime;
}
public void start() { // Allows restarting
eventTime = System.currentTimeMillis() + delayTime;
}
public boolean ready() {
return System.currentTimeMillis() >= eventTime;
}
public void action(){
System.out.println(this);
}
}
public class Controller {
// A class from java.util to hold Event objects:
private List<Event> eventList = new ArrayList<Event>();
public void addEvent(Event c) {
c.start();
eventList.add(c);
}
public void run() throws InterruptedException {
while (eventList.size() > 0)
// Make a copy so you're not modifying the list
// while you're selecting the elements in it:
for (Event e : new ArrayList<Event>(eventList))
if (e.ready()) {
e.action();
eventList.remove(e);
TimeUnit.MILLISECONDS.sleep(100);
}
}
}
使用内部类定义各种具体的事件行为
public class GreenhouseControls extends Controller {
private boolean light = false;
public class LightOn extends Event {
public LightOn(long delayTime) {
super(delayTime);
}
public void action() {
// Put hardware control code here to
// physically turn on the light.
super.action();
light = true;
}
public String toString() {
return "Light is on";
}
}
public class LightOff extends Event {
public LightOff(long delayTime) {
super(delayTime);
}
public void action() {
// Put hardware control code here to
// physically turn off the light.
super.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() {
// Put hardware control code here.
super.action();
water = true;
}
public String toString() {
return "Greenhouse water is on";
}
}
public class WaterOff extends Event {
public WaterOff(long delayTime) {
super(delayTime);
}
public void action() {
// Put hardware control code here.
super.action();
water = false;
}
public String toString() {
return "Greenhouse water is off";
}
}
private String thermostat = "Day";
public class ThermostatNight extends Event {
public ThermostatNight(long delayTime) {
super(delayTime);
}
public void action() {
// Put hardware control code here.
super.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() {
// Put hardware control code here.
super.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() {
super.action();
}
public String toString() {
return "Bing!";
}
}
public class Restart extends Event {
private List<Event> eventList;
public Restart(long delayTime, List<Event> arrayList) {
super(delayTime);
arrayList.add(this);
this.eventList = new ArrayList<Event>(arrayList);
for (Event e : arrayList)
addEvent(e);
}
public void action() {
super.action();
for (Event e : eventList) {
addEvent(e);
}
}
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) throws InterruptedException {
final GreenhouseControls gc = new GreenhouseControls();
gc.new Restart(2000, new ArrayList<Event>() {
{
this.add(gc.new ThermostatNight(0));
this.add(gc.new LightOn(200));
this.add(gc.new LightOff(400));
this.add(gc.new WaterOn(600));
this.add(gc.new WaterOff(800));
this.add(gc.new Bell(900));
this.add(gc.new ThermostatDay(1400));
}
});
if (args.length == 1)
gc.addEvent(new GreenhouseControls.Terminate(new Integer(args[0])));
gc.run();
}
}
分享到:
相关推荐
Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip ...
——————————————————————————————————————————————
学习linux的笔记,发到...Linux笔记——控制流 Linux笔记——shell补充:参数传递&函数等 Linux笔记——正则表达式入门及应用 Linux笔记——linux进程 Linux笔记——SVN命令总结 rpm&yum包管理命令总结 The end wklken
Python学习笔记——对象和类
数字图像处理笔记⑥——图像分割.pdf 数字图像处理笔记⑥——图像分割.pdf 数字图像处理笔记⑥——图像分割.pdf 数字图像处理笔记⑥——图像分割.pdf 数字图像处理笔记⑥——图像分割.pdf 数字图像处理笔记⑥——...
读书笔记——AGoodManIsHardToFind.pdf
S7-200 Smart入门笔记1-8 程序合集 S7-200 Smart入门笔记1——流水灯 按钮 S7-200 Smart入门笔记1——流水灯 定时器 S7-200 Smart入门笔记2——读时钟 ...S7-200 Smart入门笔记8——电机控制子程序调用2-IN_OUT
上海初三英语阅读精讲笔记1——阅读A篇题型-原创.rar
上海初三英语阅读精讲笔记1——阅读A篇题型-原创.pdf
———————————————— MTGNN的框架 1 × 1标准卷积首先将输入投影到潜在空间 然后将时间卷积模块和图卷积模块相互交错,分别捕获时间和空间依赖关系 控制时间卷积模块的接受域大小的超参数扩张因子d以q...
FPGA自学笔记——设计与验证公开版;十分适合初学者使用
网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维...
网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx
刘冬编写的Spring.NET学习笔记26——整合NVelocity例子。 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_NVelocity.html
树莓派学习笔记——wiringPi GPIO使用详解.docx GPIO使用详解
公开课笔记3——局部加权回归、逻辑斯蒂回归、感知器算法 公开课笔记4——牛顿方法、指数分布族、广义线性模型 公开课笔记5——生成学习、高斯判别、朴素贝叶斯 公开课笔记6——NB多项式模型、神经网络、SVM初步 ...
记忆笔记一——文化生活二 .pdf
刘冬编写Spring.NET学习笔记25——整合Quartz.NET例子。 原文: http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_QuartzNet.html