如果使用继承,我们应该强调减少重复的代码,还是保持语义更重要?
我有一个类重用其他类的代码,但从语义的角度来看,继承并不一定正确。假设我们有一个事件系统,如果某个模板与触发事件匹配,则会生成新事件。如果是这种情况,则会根据触发器和模板生成新事件。
class Event{
int field1;
int field2;
int field3;
public int someMethod() {};
protected int annotherMethod{};
}
。
class TemplateEvent extends Event{
boolean replaceField1;
boolean replaceField2;
boolean replaceField3;
int delay;
TimeUnit unit;
//....
public boolean match(Event trigger){
if(! (this.field1.equals(null) || this.field1.equals(trigger.field1))
return false
//.....
}
public Event toEvent(Event trigger) {
Event event = new Event();
event.field1 = replaceField1 ? this.field1 : trigger.field1;
//...
return event;
}
}
class EventManager{
void sheduleEvent(Event toBeProcessed){
if(toBeProcessed matches any Template:t){
scheduleEvent(t.toEvent(toBeProcessed));
}
//Execute Event..
}
}
继承有一个问题,我们可以在 TemplateEvents 上调用 sheduleEvent 。这在语法上起作用,因为所有信息都存在并且这样的事件可以被处理但是不符合它的逻辑,它只是一个模板而没有可执行事件。 在这种情况下,我们是否将Event声明为抽象类并实现一个空的EventImpl类来更改我们的方法签名?我从未见过一个实现抽象类的类,事先没有对它进行任何更改。