以下是我正在进行的项目的简化.
我们有Talker niceTalker
谁说"早上好!我的名字是乔".然后我们有一个schitzophrenic rudeTalker
,谁说"他就是我".
我花了一段时间来理解代码的作用.对我来说,这似乎是压倒一切的非常复杂的方式Talker
小号talk()
方法.更多,TalkModifier
用作命令模式中的命令(未示出).
为什么采用这种方法,而不是通过继承说多态?这是一个已知的模式,哪一个?
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(); } }
dasblinkenli.. 5
这是两种模式的组合:
委托模式 -此图案由内部创建的类中实现TalkModifier
的modify
方法,和
工厂方法模式 - 此模式由TalkModifier
匿名实现实现(TalkModifier
本质上是工厂接口)
稍微扭曲的是,两个模式都是使用匿名类实现的,一个匿名类的方法生成另一个匿名类的对象.
这是两种模式的组合:
委托模式 -此图案由内部创建的类中实现TalkModifier
的modify
方法,和
工厂方法模式 - 此模式由TalkModifier
匿名实现实现(TalkModifier
本质上是工厂接口)
稍微扭曲的是,两个模式都是使用匿名类实现的,一个匿名类的方法生成另一个匿名类的对象.