【发布时间】:2014-10-22 15:58:01
【问题描述】:
我一直在阅读Head First: Design Patterns 这本书,我发现这本书很好地介绍了设计模式。但是,我有一个关于他们在第 4 章中提出的声明的问题:
他们将“简单工厂”模式定义如下(Java 伪代码):
public abstract class Product
{
// Product characteristics
// Concrete Products should subclass this
}
public class SimpleFactory {
public Product createProduct(){
// Return an instance of some subclass of Product
}
}
public class Store {
SimpleFactory factory;
public Product orderProduct(){
Product product = factory.createProduct();
// Do some manipulation on product
return product;
}
}
“工厂方法”定义如下(Product类保持不变,省略):
public abstract class Store {
//Concrete Stores must subclass this and override createProduct()
public abstract Product createProduct();
public Product orderProduct(){
Product product = createProduct();
// Do some manipulation on product
return product;
}
}
然后作者继续声称工厂方法模式比简单工厂灵活得多,因为虽然简单工厂是“一次性交易,但使用工厂方法您正在创建一个框架,让子类决定应该使用哪个实现被使用”(第 135 页)。
现在我不明白为什么这是真的。在我看来,Simple Factory 在某种意义上比 Factory Method 稍微更加灵活:您可以将 Simple Factory 子类化(而不是 Store 子类化)以获得基本相同的行为。如果您愿意,您甚至可以在运行时更改行为!我能想到的 Simple Factory 的唯一缺点是当产品创建依赖于 Store 类的状态变量时:这是作者所说的灵活性,还是我遗漏了什么?
【问题讨论】:
标签: java design-patterns factory factory-pattern