java – 需要帮助识别此代码中使用的’覆盖方法’模式
作者:互联网
以下是我正在进行的项目的简化.
我们有Talker niceTalker说“早上好!我的名字是乔”.
然后我们有一个schitzophrenic rudeTalker,他说“他就是我”.
我花了一段时间来理解代码的作用.
对我来说,这似乎是一种非常复杂的覆盖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 – 此模式由在TalkModifier的修改方法中创建的类实现,并且
> Factory method pattern – 此模式由TalkModifier匿名实现实现(TalkModifier本质上是一个工厂界面)
稍微扭曲的是,两个模式都是使用匿名类实现的,一个匿名类的方法生成另一个匿名类的对象.
标签:java,oop,design-patterns,software-design 来源: https://codeday.me/bug/20190609/1202167.html