【发布时间】:2014-03-02 18:18:45
【问题描述】:
我已阅读以下有关工厂模式的文章here
请仅参考类注册 - 避免反射的简短部分。
此版本正在实现工厂和具体产品之间的减少耦合,而无需反射。
所以,我尝试自己实现这个版本,但没有成功。
原因是具体产品类的静态初始化器没有启动,因此没有在hashmap中注册,所以用createProduct方法调用ProductFactory实例没有成功。
当我在工厂外的客户端初始化一些具体类时,这导致静态初始化程序启动并且具体类注册良好。之后我打电话给ProductFactory.getInstance().createProduct(productID)
最终创建了具体类。
所以问题是:
此站点示例是否缺少某些内容?
在给定示例中如何触发静态初始化程序?
与此示例相关的代码是(来自网站):
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){
return ((Product)m_RegisteredProducts.get(productID)).createProduct();
}
}
【问题讨论】:
-
只要拿起 GOF 的 Design Patterns 书,它就是这个主题的经典。
-
@AdamArold:与他们在网站上所说的相反,您是否也认为 noob 实现是好的和非常合法的?
-
@AdamArold:我对他们的方法深信不疑,因为它毕竟是有道理的:工厂的 noob 实现每次都需要更改,因此它不灵活并且与具体类紧密耦合
标签: java oop design-patterns factory-pattern