Я читал книгу шаблонов GoF, и мне интересно, приведет ли использование дженериков к тем же результатам, что и использование обычной реализации клонирования шаблона прототипа. Возможно, я неправильно понимаю шаблон прототипа, поэтому дайте мне знать, если то, что там происходит, не является шаблоном прототипа.
Насколько я понимаю, шаблон прототипа в основном состоит в том, чтобы вместо создания разных фабрик для разных подклассов вы передавали подкласс фабрике в конструкторе, чтобы он создавал экземпляры подклассов из этого плана.
В приведенном ниже примере я устанавливаю тип объектов, которые эта фабрика должна возвращать как универсальный, и создаю его экземпляр при вызове make item.
Пример:
public class PrototypedFactory {
Prototype prototype;
public PrototypedFactory(Prototype prototype) {
this.prototype = prototype;
}
public Prototype makeItem() throws CloneNotSupportedException {
return (Prototype) prototype.clone();
}
public static void main(String[] args) throws Exception {
GenericFactory<ConcretePrototype> factoryGeneric = new GenericFactory<ConcretePrototype>(
ConcretePrototype.class);
PrototypedFactory factory = new PrototypedFactory(new ConcretePrototype());
Prototype item = factory.makeItem();
Prototype item2 = factoryGeneric.makeItem();
System.out.println(item.getName());
System.out.println(item2.getName());
}
}
ОбщийФабрика:
public class GenericFactory<T extends Prototype> {
Class<T> c;
public GenericFactory(Class<T> clazz) {
c = clazz;
}
public Prototype makeItem() throws Exception {
return c.newInstance();
}
}
Прототип:
public abstract class Prototype implements Cloneable {
String name = "prototype";
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public String getName() {
return name;
}
}