我必须监听来自事件发射类的事件;例如点击
。当前我有一个类可以处理来自事件发射类的事件,如下所示。
someclass.clickedOnItem1()
someclass.clickedOnItem2()
某个类在哪里
class Someclass {
//functions clickedOnItem1() and clickedOnItem2()
}
请注意,Someclass
没有实现接口(interface)。我的问题是,我只希望 Someclass
的某些子类具有此行为,并且有能力覆盖该行为,但在类 Someclass
中也有一些默认行为。 Someclass
的默认行为取决于仅在某些子类中可用的特定行为。我正在考虑组合,其中每个子类都可以提供处理单击事件的接口(interface)的自定义实现。我目前正在寻求有关可以解决此问题的最佳设计模式的建议。
最佳答案
这不会回答什么设计模式问题,而只是考虑OOP概念:您可以在SomeClass
中使用抽象,并且:
- 声明抽象方法以从具体类获取细节
- 将入口点(事件处理)方法设为
SomeClass
中的 final方法,以根据子类提供的特定配置卡住决策。这对于防止子类跳过您想要在父类(super class)中控制的逻辑非常重要。
SomeClass
可以如下所示:
abstract class Someclass {
final void clickedOnItem1(){
if(this.getConcreteOption()) {
//do if concreteOption
}
this.performClickOnItem1Action();
}
void performClickOnItem1Action() {
}
abstract boolean getConcreteOption();
}
这将强制子类提供特定的配置,保持对父类(super class)中流程的控制,同时允许具体类覆盖行为。
子类可以如下所示:
class SomeclassA {
void performClickOnItem1Action() {
//overriding this...
}
boolean getConcreteOption() {
return true;//or false
}
}
class SomeclassB {
boolean getConcreteOption() {
return true;//or false
}
}
关于Java - 对于这种情况,正确的设计/设计模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50831168/