小编Ban*_*Pig的帖子

如何强制派生类在多层上调用超类方法?

我正在尝试找到一种最优雅的方式来允许孩子和父母对祖父母发起的事件做出反应。这是一个天真的解决方案:

abstract class A {
    final public void foo() {
        // Some stuff here
        onFoo();
    }

    protected abstract void onFoo();
}

abstract class B extends A {
    @Override
    final protected void onFoo() {
        // More stuff here
        onOnFoo();
    }

    protected abstract void onOnFoo();
}

class C extends B {
    @Override
    protected void onOnFoo() {
        // Even more stuff here
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,基本上,我正在尝试找到一种最佳方法,以便在调用foo()时允许所有相关类执行某些逻辑。为了稳定和简单起见,我希望所有步骤都按顺序完成,尽管这不是必需的。

我发现的另一种解决方案涉及将所有事件处理程序存储为某种形式的Runnable:

abstract class A {
    private ArrayList<Runnable> fooHandlers = new ArrayList<>();

    final public void foo() {
        // Some …
Run Code Online (Sandbox Code Playgroud)

java design-patterns

9
推荐指数
1
解决办法
103
查看次数

标签 统计

design-patterns ×1

java ×1