C# delegate很好用,想在Java用一下,实显很简单,用runnable封装函数,用Hashmap存一下所有需要执行的runnable,然后就顺次执行好了。
package gt.small;
import java.util.HashMap;
import java.util.Iterator;
public class Delegate {
private HashMap<String, Runnable> funcs = new HashMap<String, Runnable>();
public void add(String tag, Runnable func) {
this.funcs.put(tag, func);
}
public void del(String tag) {
this.funcs.remove(tag);
}
public void invoke() {
Iterator<String> ite = funcs.keySet().iterator();
while (ite.hasNext()) {
funcs.get(ite.next()).run();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Runnable r0 = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("0");
}
};
Runnable r1 = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("1");
}
};
Delegate d=new Delegate();
d.add("0", r0);
d.invoke();
System.out.println();
d.add("1", r1);
d.invoke();
System.out.println();
d.del("0");
d.invoke();
}
}