需要帮助识别此代码中使用的 'override method' 模式

Need help identifying the 'override method' pattern used in this code

以下是我正在进行的项目的简化。

我们 Talker niceTalker"Good morning! My name is Joe"。 然后我们有一个精神分裂症 rudeTalker,他说 "He is me".

我花了一段时间才理解代码的作用。 对我来说,这似乎是一种覆盖 Talkers talk() 方法的非常复杂的方法。 此外,TalkModifier 用作 Command pattern 中的命令(未显示)。

为什么要采用这种方式,而不是说通过继承实现多态呢?这是已知模式吗?

public interface Talker {
    String getName();
    void talk();
}

-

public interface TalkModifier {
    public Talker modify(Talker talker);
}

-

class NiceGuy implements Talker {
    @Override
    public void talk() {
        System.out.println("Good morning! My name is " + getName() +".");
    }
    @Override
    public String getName() {
        return "Joe";
    }
}

public class Application {

    public static void main(String[] args) {
        Talker niceTalker = new NiceGuy();

        TalkModifier rudeTalker = new TalkModifier() {
            public Talker modify(final Talker talker) {
                return new Talker() {
                    @Override
                    public void talk() {
                        System.out.println("He is me.");
                    }
                    @Override
                    public String getName() {
                        return talker.getName();
                    }
                };
            }
        };

        niceTalker.talk();
        System.out.println();
        rudeTalker.modify(niceTalker).talk();   
    }
}

这是两种模式的组合:

  • Delegation pattern - 此模式由在 TalkModifiermodify 方法中创建的 class 和
  • 实现
  • Factory method pattern - 该模式由TalkModifier匿名实现(TalkModifier本质上是一个工厂接口)

一个细微的差别是,这两种模式都是使用匿名 classes 实现的,一个匿名 class 的方法生成另一个匿名 class 的对象。