Over Patternized
Example - Hello World
class PrintHelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}class PrintHelloWorld {
public static void main(String[] args) {
Facade facade = new Facade();
facade.print("Hello World!");
}
}
class Facade {
public void print(String message) {
Message m = new MessageBuilder().withMessage(message).build();
CommandFactory commandFactory = SystemOutPrintlnCommandFactory.getInstance();
Command command = commandFactory.createCommand(m);
command.execute();
}
}
interface Message {
String getMessage();
void setMessage(String message);
}
class DefaultMessage implements Message {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
class MessageBuilder {
private final Message message;
public MessageBuilder() {
this.message = new DefaultMessage();
}
public MessageBuilder withMessage(String message) {
this.message.setMessage(message);
return this;
}
public Message build() {
return message;
}
}
interface CommandFactory {
Command createCommand(Message message);
}
class SystemOutPrintlnCommandFactory implements CommandFactory {
private static SystemOutPrintlnCommandFactory instance = new SystemOutPrintlnCommandFactory();
public static CommandFactory getInstance() {
return instance;
}
private SystemOutPrintlnCommandFactory() {}
@Override
public Command createCommand(Message message) {
if (message instanceof DefaultMessage) {
return new SystemOutPrintlnCommand(message);
}
throw new RuntimeException("No suitable command found");
}
}
interface Command {
void execute();
}
class SystemOutPrintlnCommand implements Command {
private Message message;
public SystemOutPrintlnCommand(Message message) {
this.message = message;
}
@Override
public void execute() {
System.out.println(message.getMessage());
}
}Last updated