Skip to content

Instantly share code, notes, and snippets.

@vndmtrx
Created March 26, 2013 23:42
Show Gist options
  • Select an option

  • Save vndmtrx/5250327 to your computer and use it in GitHub Desktop.

Select an option

Save vndmtrx/5250327 to your computer and use it in GitHub Desktop.
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);
}
}
class HelloWorld {
public static void main(String[] args) {
Message message = new Message("Hello, World!");
AbstractPrinterFactory factory = SystemOutPrinterFactory.getFactory();
Printer printer = factory.getPrinter();
message.print(printer);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment