我一直在读书Head First: Design Patterns,我发现这是对设计模式的很好的介绍。但是,我对他们在第4章中提出的主张有疑问:
他们定义了如下的“ Simple Factory”模式(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的唯一缺点是,当产品创建取决于Store类的状态变量时:这是作者所谓的灵活性吗?还是我错过了一些东西?
我一直在阅读《 Head First:设计模式》一书,发现这是对设计模式的很好介绍。但是,我对他们在第4章中提出的主张有疑问:他们定义了...SimpleFactory
的子类,这不是一个合理的假设(除非SimpleFactory
标记为final
)。由于SimpleFactory
不是最终的,因此您可以肯定地对其进行子类化,从而比工厂方法具有更大的灵活性,因为SimpleFactory
用组成替换了继承。
orderProduct
称为createProduct
。