Design patterns 是否将责任委托给工厂类而不是子类,对吗?

Design patterns 是否将责任委托给工厂类而不是子类,对吗?,design-patterns,factory-pattern,Design Patterns,Factory Pattern,我正在阅读有关工厂模式的书籍,并理解其概念和实施。但是这个定义让我很困惑。有人能澄清一下吗 定义:工厂模式用于定义用于创建对象的接口,但将对象创建委托给子类 我对将对象创建委托给子类感到困惑。这是将责任委托给工厂类而不是子类来纠正?我还不能发表评论。否则这将是一个评论 我的建议是仔细阅读这篇文章。他努力建立一个工厂模式。对于上下文,您最好阅读整个线程。它没有那么长,非常有启发性。阅读:工厂模式是定义一个用于创建对象的接口,但将对象创建委托给工厂类的子类 注意:factory类的子类 您从一个类开

我正在阅读有关工厂模式的书籍,并理解其概念和实施。但是这个定义让我很困惑。有人能澄清一下吗

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


我对将对象创建委托给子类感到困惑。这是将责任委托给工厂类而不是子类来纠正?

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

我的建议是仔细阅读这篇文章。他努力建立一个工厂模式。对于上下文,您最好阅读整个线程。它没有那么长,非常有启发性。

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

注意:factory类的子类

您从一个类开始:
CheeseCakeFactory
。您有这样一个实例:

CheeseCakeFactory theFactory = new CheeseCakeFactory();       .......  (1)
然后你会:

Cake aCake = theFactory.createCake();                         .......  (2)
在这里,我同意你的观点,创造的任务被委托给了工厂。但是现在再考虑第一行:

CheeseCakeFactory theFactory = new SweetCakeFactory();        .......  (3)
我们假设
SweetCakeFactory
继承
CheeseCakeFactory

仅仅通过改变工厂的具体实施,最终创建的产品就会发生变化。现在第二行将要求子类创建对象。这就是为什么我们说实例化的责任被委托给了子类。

试着这样分解定义

工厂模式用于定义用于创建对象的接口(…)

首先定义一个接口

interface IObjectFactory
{
    object CreateObject();
}
这个接口将基本上定义工厂做什么以及它创建什么类型的对象。但是,它仍然是一个接口,所以要使用它,首先需要实现它

因此,

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

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

如果你看一看,你会发现它看起来很相似,但却传达了实际的含义:

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