<分区>
以下是我正在进行的项目的简化。
我们有 Talker niceTalker
说“早上好!我叫乔”。
然后我们有一个精神 split 症 rudeTalker
,他说“他是我”。
我花了一段时间才理解代码的作用。
对我来说,这似乎是一种覆盖 Talker
的 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();
}
}