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); } }