我正在阅读有关工厂模式的内容,并了解它的概念和实现。但这个定义令我感到困惑。有人可以澄清一下吗?
定义:工厂模式是定义用于创建对象的接口,但是将对象创建委托给子类。
我很困惑将对象创建委托给子类。它将工厂类的责任委托给子类正确吗?
答案 0 :(得分:1)
我还不能发表评论。否则这将是一个评论。
我的建议是彻底阅读本文Is this correct object oriented programming in php?。他努力建立工厂模式。对于上下文,您可能最好阅读整个线程。它不是那么长,而且非常具有启发性。
答案 1 :(得分:1)
阅读:工厂模式是定义用于创建对象的接口,但将对象创建委托给工厂类的
注意:工厂类的子类
您从课程开始:CheeseCakeFactory
。你有一个像它的实例:
CheeseCakeFactory theFactory = new CheeseCakeFactory(); ....... (1)
然后你做:
Cake aCake = theFactory.createCake(); ....... (2)
在这里我同意你的看法,创作的任务被委托给了工厂。但现在再考虑第一行:
CheeseCakeFactory theFactory = new SweetCakeFactory(); ....... (3)
我们假设SweetCakeFactory
继承CheeseCakeFactory
只需改变工厂的具体实施,最终创建的产品就会发生变化。现在第二行将要求子类创建对象。这就是为什么我们说实例化的责任被委托给子类。
答案 2 :(得分:0)
尝试以这种方式分解定义,
Factory模式用于定义用于创建对象的接口(...)
首先定义一个界面,比如说,
interface IObjectFactory
{
object CreateObject();
}
此接口基本上将定义工厂的功能以及它创建的对象类型。但是,它仍然是一个接口,所以要消耗它,首先需要实现它。
因此,
(...)但是将对象创建委托给子类。
在这里,我认为问题在于子类的措辞:interfaces 不能具有子类,因为它们是不是类,它们是接口。此外,整个句子看起来像冗余,因为接口必须总是将实现委托给一个类。
如果你看一下the definition on Wikipedia for Factory pattern,你会发现它看起来很相似,但却传达了实际意义:
此模式的本质是“定义用于创建对象的接口,但让实现接口的类决定实例化哪个类.Pool方法允许类延迟实例化到子类。“