1

I am reading about Factory pattern and understand the concept and implementation of it. But the definition is confusing me. Can someone please clarify it?

Definition: The Factory pattern is to define an interface for creating objects but delegates the object creation to the subclasses.

I was confused at delegates the object creation to the subclasses. It is delegating responsibility to factory class not to sub classes correct?

4

3 回答 3

1

我还不能发表评论。否则这将是一个评论。

我的建议是阅读这篇文章,这是正确的 php 中的面向对象编程吗?,彻底。他努力建立工厂模式。对于上下文,您最好阅读整个线程。它并不长,而且很有启发性。

于 2013-06-07T18:09:01.853 回答
1

阅读:工厂模式是定义一个用于创建对象的接口,但将对象的创建委托给工厂类的子类

注意:工厂类的子类

你从一个类开始:CheeseCakeFactory. 你有一个这样的实例:

CheeseCakeFactory theFactory = new CheeseCakeFactory();       .......  (1)

然后你做:

Cake aCake = theFactory.createCake();                         .......  (2)

在这里,我同意您的观点,即创建任务已委托给工厂。但现在再次考虑第一行:

CheeseCakeFactory theFactory = new SweetCakeFactory();        .......  (3)

我们假设SweetCakeFactory继承CheeseCakeFactory 只是通过改变工厂的具体实现,最终创建的产品发生变化。现在第二行将要求子类创建对象。这就是为什么我们说实例化的责任委托给子类的原因。

于 2013-06-07T18:34:02.440 回答
0

尝试以这种方式分解定义,

工厂模式是定义一个用于创建对象的接口(...)

首先你定义一个接口,比如说,

interface IObjectFactory
{
    object CreateObject();
}

这个接口基本上将定义工厂做什么以及它创建什么类型的对象。但是,它仍然是一个接口,因此要使用它,您首先需要实现它。

因此,

(...) 但将对象创建委托给子类。

在这里,我认为问题在于子类的措辞:接口不能有子类,因为它们不是类,它们是接口。此外,整个句子似乎是多余的,因为接口必须始终将实现委托给类。

如果您查看Wikipedia 上对 Factory 模式的定义,您会注意到它看起来很相似,但传达了实际含义:

这种模式的本质是“定义一个用于创建对象的接口,但让实现该接口的类决定实例化哪个类。工厂方法让一个类将实例化推迟到子类。

于 2013-06-07T18:53:39.437 回答