これは「パターン指向リファクタリング入門」で見たJava以来すごい。
読みにくいので貼り付けてみると、こんな感じ。すごくパターンハッピーですね。気持ちはわかります。オブジェクト指向デザインパターンを覚えると必要ないところにまで使いたくなるんですよね、なぜか。なんか必殺技っぽいからでしょうか。
/* http://developers.slashdot.org/comments.pl?sid=33602&cid=3636102 */ public interface MessageStrategy { public void sendMessage(); } public abstract class AbstractStrategyFactory { public abstract MessageStrategy createStrategy(MessageBody mb); } public class MessageBody { Object payload; public Object getPayload() { return payload; } public void configure(Object obj) { payload = obj; } public void send(MessageStrategy ms) { ms.sendMessage(); } } public class DefaultFactory extends AbstractStrategyFactory { private DefaultFactory() {;} static DefaultFactory instance; public static AbstractStrategyFactory getInstance() { if (instance==null) instance = new DefaultFactory(); return instance; } public MessageStrategy createStrategy(final MessageBody mb) { return new MessageStrategy() { MessageBody body = mb; public void sendMessage() { Object obj = body.getPayload(); System.out.println((String)obj); } }; } } public class HelloWorld { public static void main(String[] args) { MessageBody mb = new MessageBody(); mb.configure("Hello World!"); AbstractStrategyFactory asf = DefaultFactory.getInstance(); MessageStrategy strategy = asf.createStrategy(mb); mb.send(strategy); } }