我正在为Tree创建自定义事件侦听器。我在这里创建了一个监听器接口
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) {
}
}
但我对一件事感到有些困惑。我想尽可能地编写代码并使用模式。所以我想知道下一步做什么是最优雅的方式。 我的课程让我的听众成为了领域。 我有四个不同的事件可以发生。那么什么是发射事件的正确方法。 我有一些想法,但不知道哪个更好。
只创建一个fireEvent方法,该方法应检查已执行的事件类型。如果是,否则。如果要这样做,我应该创建例如enum并在我的事件对象中创建字段类型,而不是在构造函数中设置它,并在稍后的fireEvent方法中检查它。并且根据类型调用来自侦听器列表的不同方法。例如:
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); } }
使用不同类型的fireEvent方法:fireAddEvent,fireDelete event .......依赖于此,还调用不同的侦听器方法。
为每种类型的侦听器创建单独的数组。并且也使用特殊的fireEvent方法。
我不知道什么是更好和更好的做法。请建议其他一些实施或之前列出的最佳实施。 提前致谢
答案 0 :(得分:0)
我会考虑使用4种不同的防火方法。改变方法参数的行为对我来说并不是很干净。
让您的类具有添加/删除侦听器方法(从某种集合中添加/删除这些侦听器)。然后是4种火灾方法(每种类型的事件一种,通过你的听众调用正确的方法循环),我觉得生活应该很好。