Java 多事件侦听器和适配器
我正在为树创建自定义事件侦听器。我在这里创建了一个监听器接口Java 多事件侦听器和适配器,java,android,events,listener,Java,Android,Events,Listener,我正在为树创建自定义事件侦听器。我在这里创建了一个监听器接口 public interface TreeActionListener extends EventListener { public void onAddNode(TreeEventObject eventObject); public void onRemoveNode(TreeEventObject eventObject); public void onRenameNode(TreeEventObject
public interface TreeActionListener extends EventListener {
public void onAddNode(TreeEventObject eventObject);
public void onRemoveNode(TreeEventObject eventObject);
public void onRenameNode(TreeEventObject eventObject);
public void onCreateNode(TreeEventObject eventObject);
}
我还创建了名为TreeEventObject的自定义事件对象,下面是代码
public class TreeEventObject extends EventObject {
private Object dataToPass =null;
/**
* Constructs a prototypical Event.
*
* @param source The object on which the Event initially occurred.
* @throws IllegalArgumentException if source is null.
*/
public TreeEventObject(Object source, Object dataToPass) {
super(source);
this.dataToPass = dataToPass;
}
public Object getPassedData() {
return this.dataToPass;
}
}
正如jdk中提到的,模式适配器被广泛使用。当我在监听器接口中有很多方法,但我只需要一个方法时,就会用到它。
所以我创建了我的适配器
public class TreeActionAdapter implements TreeActionListener {
@Override
public void onAddNode(TreeEventObject eventObject) {
}
@Override
public void onRemoveNode(TreeEventObject eventObject) {
}
@Override
public void onRenameNode(TreeEventObject eventObject) {
}
@Override
public void onCreateNode(TreeEventObject eventObject) {
}
}
但有一件事我有点困惑。我希望编写尽可能干净的代码并使用模式。所以我想知道下一步最优雅的方式是什么。
我有一个类,它将我的侦听器作为字段。
我有四个不同的事件可以发生。那么什么是激发事件的正确方式呢。
我有一些想法,但不知道哪一个更好
首先,我会考虑采用4种不同的防火方法。改变方法参数的行为对我来说不是很干净
只要让您的类有一个添加/删除侦听器方法(从某种集合中添加/删除这些侦听器)。然后是4种射击方法(每种类型都有一种,它会让你的听众循环调用正确的方法),我认为生活应该很好。我会考虑使用4种不同的射击方法。改变方法参数的行为,对我来说不是很干净。那么你觉得用fireMethods创建intefrace怎么样?那个树类会实现吗?我自己并不认为这是非常重要的。只要让您的类有一个添加/删除侦听器方法(从某种集合中添加/删除这些侦听器)。然后是4种激发方法(每种类型的事件一种,通过你的听众循环调用正确的方法),我认为生活应该很美好。非常感谢你的帮助,我会听从你的建议。将您的信息作为答案发布。
if(event.type==NODE_ADD) {
for (TreeActionListener listener: listeners) {
listener.onAddNode(event);
}
}else
if(event.type==NODE_DELETE) {
for (TreeActionListener listener: listeners) {
listener.onDeleteNode(event);
}
}