需要帮助识别此代码中使用的 '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".
我花了一段时间才理解代码的作用。
对我来说,这似乎是一种覆盖 Talker
s 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
的 modify
方法中创建的 class 和 实现
- Factory method pattern - 该模式由
TalkModifier
匿名实现(TalkModifier
本质上是一个工厂接口)
一个细微的差别是,这两种模式都是使用匿名 classes 实现的,一个匿名 class 的方法生成另一个匿名 class 的对象。
以下是我正在进行的项目的简化。
我们 Talker niceTalker
说 "Good morning! My name is Joe"。
然后我们有一个精神分裂症 rudeTalker
,他说 "He is me".
我花了一段时间才理解代码的作用。
对我来说,这似乎是一种覆盖 Talker
s 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
的modify
方法中创建的 class 和 实现
- Factory method pattern - 该模式由
TalkModifier
匿名实现(TalkModifier
本质上是一个工厂接口)
一个细微的差别是,这两种模式都是使用匿名 classes 实现的,一个匿名 class 的方法生成另一个匿名 class 的对象。