【发布时间】:2016-01-03 18:18:11
【问题描述】:
我一直在阅读 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;
}
}
【问题讨论】:
标签: java generics design-patterns clone prototype-pattern