Uber电面【一亩三分地论坛面经版】 - Powered by Discuz!
设计一个EventListener要求实现register unregister 和 post 方法
就是一个HashMap<String, List<Event>>然后函数是这样的
. From 1point 3acres bbs
public void register(String eventName, Event event) {};
public void unregister(String eventName, Event event){};
public void postEvent(String eventName, Object Data){};
public class Event {
public void doEvent(Object data);. 1point3acres.com/bbs
}
就用HashMap去做就好了 很简单的。
为啥感觉一般都是在 Object 下注册 listener 呢,比如 android 里面的一个 button,可以注册 setOnClickListener 事件,button 被 click 之后,就会呼叫 clickListener,触发相应的注册事件。
class Button{.
Map<String, List<Listener>> listenerMap;
clicked(){
for(Listener listener : listenerMap.get("click")){
listener.clicked();
}
}
}.
import java.util.*;
class Solution {
public static void main(String[] args) {
}
}
class EventListener {
private Map<String, List<Event>> map;
public EventListener() {
map = new HashMap<String, List<Event>>();
}
public void register(String eventName, Event event) {. 1point3acres.com/bbs
if (map.containsKey(eventName)) {
map.get(eventName).add(event);
} else {
List<Event> events = new ArrayList<Event>();
events.add(event);
map.put(eventName, events);
}
};
. From 1point 3acres bbs
public void unregister(String eventName, Event event) {
if (map.containsKey(eventName)) {
map.get(eventName).remove(event);
}
};
public void postEvent(String eventName, Object Data) {
Event event = new Event();
event.doEvent(Data);
this.register(eventName, event);
};
}
class Event {
private Object data;
public void doEvent(Object data) {
this.data = data;
};
}
差不多 要考虑输入的有效性 然后 post event 是指对所有该 event 的 listener 都 doEvent
Read full article from Uber电面【一亩三分地论坛面经版】 - Powered by Discuz!
设计一个EventListener要求实现register unregister 和 post 方法
就是一个HashMap<String, List<Event>>然后函数是这样的
. From 1point 3acres bbs
public void register(String eventName, Event event) {};
public void unregister(String eventName, Event event){};
public void postEvent(String eventName, Object Data){};
public class Event {
public void doEvent(Object data);. 1point3acres.com/bbs
}
就用HashMap去做就好了 很简单的。
为啥感觉一般都是在 Object 下注册 listener 呢,比如 android 里面的一个 button,可以注册 setOnClickListener 事件,button 被 click 之后,就会呼叫 clickListener,触发相应的注册事件。
class Button{.
Map<String, List<Listener>> listenerMap;
clicked(){
for(Listener listener : listenerMap.get("click")){
listener.clicked();
}
}
}.
所以是在 Object 下记录 listener, 而非在 listener 下记录 event 事件
import java.io.*;. 鐗涗汉浜戦泦,涓€浜╀笁鍒嗗湴import java.util.*;
class Solution {
public static void main(String[] args) {
}
}
class EventListener {
private Map<String, List<Event>> map;
public EventListener() {
map = new HashMap<String, List<Event>>();
}
public void register(String eventName, Event event) {. 1point3acres.com/bbs
if (map.containsKey(eventName)) {
map.get(eventName).add(event);
} else {
List<Event> events = new ArrayList<Event>();
events.add(event);
map.put(eventName, events);
}
};
. From 1point 3acres bbs
public void unregister(String eventName, Event event) {
if (map.containsKey(eventName)) {
map.get(eventName).remove(event);
}
};
public void postEvent(String eventName, Object Data) {
Event event = new Event();
event.doEvent(Data);
this.register(eventName, event);
};
}
class Event {
private Object data;
public void doEvent(Object data) {
this.data = data;
};
}
差不多 要考虑输入的有效性 然后 post event 是指对所有该 event 的 listener 都 doEvent
Read full article from Uber电面【一亩三分地论坛面经版】 - Powered by Discuz!