62,623
社区成员
发帖
与我相关
我的任务
分享alert("mark")
public class ObserverPack {
private Object obj = null;
private Method onEventMethod = null;
public ObserverPack(Object obj, String onEventMethod)
throws SecurityException, NoSuchMethodException{
this.obj = obj;
this.onEventMethod = obj.getClass().getMethod(onEventMethod);
}
public void onEvent()
throws IllegalArgumentException,
IllegalAccessException, InvocationTargetException{
onEventMethod.invoke(obj);
}
}
public class Manager {
public static final String AEVENT = "AEVENT";
private Map<String, List<ObserverPack>> observerMap =
new HashMap<String, List<ObserverPack>>();
public void addObserver(Object object, String method, String eventName)
throws SecurityException, NoSuchMethodException{
if(observerMap.containsKey(eventName))
observerMap.get(eventName).add(new ObserverPack(object, method));
else{
List<ObserverPack> observers = new ArrayList<ObserverPack>();
observers.add(new ObserverPack(object, method));
observerMap.put(eventName, observers);
}
}
public void onEvent(String eventName)
throws Exception{
if(!observerMap.containsKey(eventName))
throw new NoSuchEventException();
for(ObserverPack op : observerMap.get(eventName))
op.onEvent();
}
}
public class PrimalObserver {
public void onEvent(){
System.out.println("On Event!");
}
}
@SuppressWarnings("serial")
public class NoSuchEventException extends Exception {
}
public class ObserverTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Manager manager = new Manager();
PrimalObserver po = new PrimalObserver();
try {
manager.addObserver(po, "onEvent", Manager.AEVENT);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
manager.onEvent(Manager.AEVENT);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}