您的位置:首页 > 编程语言 > Go语言

go语言里比较好用的计划任务调度模块

2014-10-11 13:59 513 查看
      在java里面事件驱动是一种比较常见的设计模式,主要以awt控件为主!对于事件驱动我了解比较深刻的时候应该就是现在了,昨天刚刚听了一个高手将事件驱动,明白了一些道理,高手举的例子是一个小孩在睡觉,醒了之后,监护人去照顾他的场景模拟!

 

事件驱动标准的代码

package event.cn;

import java.util.ArrayList;
import java.util.List;

/* 看护人 */
interface Keeper {
public abstract void action(EventSource es);
}

class Father implements Keeper {

@Override
public void action(EventSource es) {
System.out.println("Father do........");
}

}

class Mother implements Keeper {

@Override
public void action(EventSource es) {
System.out.println("Monther do........");
}

}

class GrandFather implements Keeper {

@Override
public void action(EventSource es) {
System.out.println("GrandFather do........");
}

}

class GrandMother implements Keeper {

@Override
public void action(EventSource es) {
System.out.println("GrandMonther do........");
}

}

/* 被看护人 */
class Child implements Runnable {
List<Keeper> keepers = new ArrayList<Keeper>();
EventSource es;

public Child() {
}

public void addKeeper(Keeper k){
this.keepers.add(k);
}

public void wakeup() {
for(Keeper k : this.keepers){
k.action(es);
}
}

@Override
public void run() {
System.out.println("sleep ......");
try {
new Thread().sleep(5000);// 5秒后醒来
this.wakeup();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

/* 传递信息 */
class EventSource {
private String something_msg;
private Child child;

public EventSource(String something_msg, Child child) {
super();
this.something_msg = something_msg;
this.child = child;
}

public String getSomething_msg() {
return something_msg;
}

public void setSomething_msg(String something_msg) {
this.something_msg = something_msg;
}

public Child getChild() {
return child;
}

public void setChild(Child child) {
this.child = child;
}

}

public class EventTest {
public static void main(String[] args) {
Child child = new Child();
child.addKeeper(new Father());
child.addKeeper(new GrandFather());
new Thread(child).start();
}
}

 

 

在听高手讲解之前,我只能写出这样的代码

package event.com;

import java.util.ArrayList;
import java.util.List;

/* 看护人 */
abstract class Keeper{
public abstract void action(EventSource es);

public void receive(EventSource es ){
List<Keeper> ks = es.getKs();
for(Keeper k : ks){
k.action(es);
}
}
}
/* 适配器 */
class KeeperAdapter extends Keeper{

@Override
public void action(EventSource es) {

}
}
class Father extends Keeper{

@Override
public void action(EventSource es) {
System.out.println("Father do........");
}

}

class Mother extends Keeper{

@Override
public void action(EventSource es) {
System.out.println("Monther do........");
}

}

class GrandFather extends Keeper{

@Override
public void action(EventSource es) {
System.out.println("GrandFather do........");
}

}

class GrandMother extends Keeper{

@Override
public void action(EventSource es) {
System.out.println("GrandMonther do........");
}

}

/* 被看护人 */
class Child implements Runnable{
EventSource es;
public Child(EventSource es){
this.es = es;
}

public void wakeup(){
Keeper k = new KeeperAdapter();
k.receive(this.es);
}

@Override
public void run() {
System.out.println("sleep ......");
try {
new Thread().sleep(5000);//5秒后醒来
this.wakeup();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

/* 传递信息 */
class EventSource{
private String something_msg;
private List<Keeper> ks;
public EventSource(String something_msg, List<Keeper> ks) {
super();
this.something_msg = something_msg;
this.ks = ks;
}

public String getSomething_msg() {
return something_msg;
}

public void setSomething_msg(String something_msg) {
this.something_msg = something_msg;
}

public List<Keeper> getKs() {
return ks;
}

public void setKs(List<Keeper> ks) {
this.ks = ks;
}

}

public class EventTest {
public static void main(String[] args) {
List<Keeper> ks = new ArrayList<Keeper>();
ks.add(new Father());
ks.add(new GrandFather());
EventSource es = new EventSource("test something",ks);
Child child = new Child(es);
new Thread(child).start();
}
}

 

 

看上去两端代码的效果都是一样,但是前一个要比后一个要简练很多,而且设计也好很多!大家认为呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: