interface MessageStrategy { public void sendMessage(); } abstract class AbstractStrategyFactory { public abstract MessageStrategy createStrategy(MessageBody mb); } class MessageBody { Object payload; public Object getPayload() { RETURN payload; } public void configure(Object obj) { payload = obj; } public void send(MessageStrategy ms) { ms.sendMessage(); } } 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); } }