我有一个Java类,它会触发自定义Java事件。该代码的结构如下:
public class AEvent extends EventObject { ... } public interface AListener extends EventListener { public void event1(AEvent event); } public class A { public synchronized void addAListener(AListener l) { .. } public synchronized void removeAListener(AListener l) { .. } protected void fireAListenerEvent1(AEvent event) { .. } }
一切正常,但是我想创建一个新的A类(称为B),这可能会引发一个新事件。我正在考虑以下修改:
public class BEvent extends AEvent { ... } public interface BListener extends AListener { public void event2(BEvent event); } public class B extends A { public synchronized void addBListener(BListener l) { .. } public synchronized void removeBListener(BListener l) { .. } protected void fireBListenerEvent2(AEvent event) { .. } }
这是正确的方法吗?我在网上搜索示例,但找不到任何示例。
在此解决方案中,有几件事我我不喜欢:
BListener
AEvent
BEvent
B
addAListener
addBListener
fireAListenerEvent1
fireBListenerEvent1
我正在使用Java版本1.5。
我看不出为什么BListener要延长的理由AListener。
AListener
您是否真的要强迫每个对B事件感兴趣的人也实施event1()?
event1()
同样,您也不能添加addAListener(),因为派生类无法降低父类中存在的方法的可见性。另外,您不需要这样做,否则会违反Liskov替换原则(每个B必须能够做A可以做的一切)。
addAListener()
最后,我要对fire*()方法进行保护。通常没有任何理由让他们保持公开状态,减少公共成员的数量可以使您的公共界面保持整洁。
fire*()