gpt4 book ai didi

java - 使用泛型而不是可克隆的原型(prototype)模式

转载 作者:行者123 更新时间:2023-12-01 10:37:35 24 4
gpt4 key购买 nike

我一直在阅读 GoF 模式书,我想知道使用泛型是否会获得与使用原型(prototype)模式的传统克隆实现相同的结果。也许我没有正确理解原型(prototype)模式,所以让我知道那里发生的事情是否不是原型(prototype)模式。

据我了解,原型(prototype)模式基本上不是为不同的子类创建不同的工厂,而是将子类传递给构造函数中的工厂,以便它从该蓝图中实例化子类。

在下面的例子中我设置了该工厂应返回的对象类型作为通用对象,并在调用 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();
}

}

原型(prototype):

public abstract class Prototype implements Cloneable {
String name = "prototype";

@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}

public String getName() {
return name;
}
}

最佳答案

原型(prototype)背后的想法是,您可以以任何您想要的方式配置原型(prototype)对象,并且您将始终获得完美的副本。您无法使用泛型来实现这一点,因此需要类似克隆的方法。

它也与纯粹形式的子类没有任何关系。你混淆了工厂和原型(prototype)。

关于java - 使用泛型而不是可克隆的原型(prototype)模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34579926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com