HelloWorld com Design Patterns

Pra quem acha que não dá pra complicar mais…

[code]interface Printer {
void print(Message message);
}

class Message {

private String message;

public Message(String message) {
this.message = message;
}

public void print(Printer printer) {
printer.print(this);
}

public String toString() {
return message;
}
}

abstract class AbstractPrinterFactory {

public static AbstractPrinterFactory getFactory() {
return new SystemOutPrinterFactory();
}

public abstract Printer getPrinter();
}

class SystemOutPrinterFactory extends AbstractPrinterFactory {

public Printer getPrinter() {
return new SystemOutPrinter();
}

}

class SystemOutPrinter implements Printer {

public void print(Message message) {

  System.out.println(message);

}

}

public class HelloWorld {

public static void main(String[] args) {
Message message = new Message(“Hello, World!”);
AbstractPrinterFactory factory = AbstractPrinterFactory.getFactory();
Printer printer = factory.getPrinter();
message.print(printer);
}

}[/code]

Fonte:http://desciclo.pedia.ws/wiki/Java

Absurdo! Como que Printer depende da implementação concreta de Message? Este código deve ser refatorado para que Message seja uma mensagem, assim eu posso ter mensagens provenientes de arquivos, e-mails ou sinais de fumaça (não se esqueça do RemoteDescriptor para os sinais de fumaça).