【发布时间】:2019-03-11 17:23:24
【问题描述】:
我在this 链接中研究Factory Pattern。
在编写了一个普通的工厂之后,作者继续设计一个工厂,我们不必修改工厂的代码来添加新的具体实现。 (假设有一个Product 接口,工厂提供了它的实现)。
为了实现这一点,作者说:
我们在产品抽象类中添加了一个新的抽象方法。每个具体类都将实现此方法以创建与自身相同类型的新对象。
这个代码sn-p如下:
abstract class Product
{
public abstract Product createProduct();
...
}
class OneProduct extends Product
{
...
static
{
ProductFactory.instance().registerProduct("ID1", new OneProduct());
}
public OneProduct createProduct()
{
return new OneProduct();
}
...
}
class ProductFactory
{
public void registerProduct(String productID, Product p) {
m_RegisteredProducts.put(productID, p);
}
public Product createProduct(String productID){
((Product)m_RegisteredProducts.get(productID)).createProduct();
}
}
我有一个疑问。我们已经在工厂注册了一个 OneProduct 的instance。然后在运行时,我们调用createProduct() 方法再次创建Oneproduct 的新实例。
这是正确的做法吗?我们必须在这里创建OneProduct 的两个实例,我觉得这是错误的。
【问题讨论】:
-
我猜这个解决方案是在 Java 8 之前设计的。在 Java 8 中,您可能可以改用
Supplier<Product>。 -
我不相信那个叫字段
m_RegisteredProducts的人,这篇文章似乎过时了
标签: java oop design-patterns factory-pattern