rendered paste bodyinterface 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); }}