以下是我正在进行的项目的简化。
我们有Talker niceTalker
谁说"早上好!我叫Joe" 。
然后我们有一个schitzophrenic 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();
}
}
答案 0 :(得分:5)
这是两种模式的组合:
TalkModifier
的{{1}}方法中创建的类实现,并且modify
匿名实施实现(TalkModifier
本质上是工厂界面)稍微扭曲的是,两个模式都是使用匿名类实现的,一个匿名类的方法生成另一个匿名类的对象。