我必须听一个事件发射课的事件;例如click
。当前我有一个类来处理来自事件发射类的事件。
someclass.clickedOnItem1()
someclass.clickedOnItem2()
其中someclass是
class Someclass {
//functions clickedOnItem1() and clickedOnItem2()
}
请注意Someclass
未实现接口。我的问题是,我只希望Someclass
的某些子类具有此行为,并且有能力覆盖行为,但在类Someclass
中也有一些默认行为。 Someclass
的默认行为取决于仅在某些子类中可用的特定行为。我正在考虑组合,其中每个子类可以提供处理点击事件的接口的自定义实现。我目前正在寻找可以解决这个问题的最佳设计模式的建议。
答案 0 :(得分:2)
这不会回答什么设计模式问题,而只是考虑OOP概念:您可以在SomeClass
中使用抽象,并且:
SomeClass
中使入口点(事件处理)方法最终,以根据子类提供的特定配置冻结决策。这对于防止子类跳过您想要在超类中控制的逻辑非常重要。 SomeClass
可能如下所示:
abstract class Someclass {
final void clickedOnItem1(){
if(this.getConcreteOption()) {
//do if concreteOption
}
this.performClickOnItem1Action();
}
void performClickOnItem1Action() {
}
abstract boolean getConcreteOption();
}
这将强制子类提供特定的配置,保持对超类中流的控制,同时允许具体类覆盖行为。
子类看起来像:
class SomeclassA {
void performClickOnItem1Action() {
//overriding this...
}
boolean getConcreteOption() {
return true;//or false
}
}
class SomeclassB {
boolean getConcreteOption() {
return true;//or false
}
}