public class PrototypeDemo {
private Message message;
PrototypeDemo(Message message) {
this.message = message;
}
Message makeMessage() {
return this.message.makeCopy();
}
public static void main(String[] args) {
Message prototype = new EmailMessage();
PrototypeDemo demo = new PrototypeDemo(prototype);
System.out.println("Message " + demo.makeMessage());
}
}
abstract class Message {
public Message makeCopy() {
try {
return this.getClass().newInstance();
} catch (InstantiationException e) {
return null;
} catch (IllegalAccessException e) {
return null;
}
}
}
class EmailMessage extends Message {
@Override
public String toString() {
return "EmailMessage";
}
}