Java - 这种情况下适当的设计/设计模式是什么?

时间:2018-06-13 07:15:23

标签: java design-patterns

我必须听一个事件发射课的事件;例如click。当前我有一个类来处理来自事件发射类的事件。

someclass.clickedOnItem1()
someclass.clickedOnItem2()

其中someclass是

class Someclass {
   //functions clickedOnItem1() and clickedOnItem2()
}

请注意Someclass未实现接口。我的问题是,我只希望Someclass的某些子类具有此行为,并且有能力覆盖行为,但在类Someclass中也有一些默认行为。 Someclass的默认行为取决于仅在某些子类中可用的特定行为。我正在考虑组合,其中每个子类可以提供处理点击事件的接口的自定义实现。我目前正在寻找可以解决这个问题的最佳设计模式的建议。

1 个答案:

答案 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
    }
}