Questions tagged «factory-method»



16
抽象工厂和工厂设计模式之间有什么区别?
我知道有很多关于这两种模式之间差异的文章,但是有些事情我找不到。 从我所阅读的内容中,我看到工厂方法模式允许您定义如何创建单个具体产品,但是对客户端隐藏了实现,因为他们将看到通用产品。我的第一个问题是关于抽象工厂。它的作用是允许您在其中创建具体对象系列(具体取决于您使用的特定工厂),而不仅仅是单个具体对象?抽象工厂是否仅根据调用的方法返回一个很大的对象或一个很大的对象? 我的最后两个问题是关于一个引号,我无法完全理解我在很多地方都看到过的情况: 两者之间的区别是,在使用抽象工厂模式时,一个类通过组合将对象实例化的责任委托给另一个对象,而工厂方法模式则使用继承并依赖于子类来处理所需的对象实例化。 我的理解是,工厂方法模式具有一个Creator接口,它将使ConcreteCreator负责知道要实例化哪个ConcreteProduct。这是使用继承处理对象实例化的意思吗? 现在关于那句话,抽象工厂模式究竟如何通过组合将对象实例化的职责委托给另一个对象?这是什么意思?在我看来,抽象工厂模式似乎也使用继承来完成构建过程,但是我仍然在学习这些模式。 任何帮助,特别是最后一个问题,将不胜感激。

10
如何在C ++中正确实现工厂方法模式
在C ++中有一件事让我很长时间以来一直感到不舒服,因为老实说我不知道​​怎么做,尽管听起来很简单: 如何在C ++中正确实现Factory方法? 目标:允许客户端使用工厂方法而不是对象的构造函数实例化某些对象,而不会造成不可接受的后果和性能损失。 “工厂方法模式”是指对象内部的静态工厂方法或另一个类中定义的方法或全局函数。通常只是“将类X的常规实例化方法重定向到构造函数以外的任何其他地方的概念”。 让我浏览一下我想到的一些可能的答案。 0)不要制造工厂,制造构造函数。 这听起来不错(实际上通常是最好的解决方案),但这不是一般的补救方法。首先,在某些情况下,对象构造是一个任务复杂到足以证明将其提取到另一个类的任务。但是即使抛开这个事实,即使对于仅使用构造函数的简单对象,也常常不起作用。 我知道的最简单的示例是2-D Vector类。如此简单,但棘手。我希望能够同时从笛卡尔坐标和极坐标构造它。显然,我不能做: struct Vec2 { Vec2(float x, float y); Vec2(float angle, float magnitude); // not a valid overload! // ... }; 我的自然思维方式是: struct Vec2 { static Vec2 fromLinear(float x, float y); static Vec2 fromPolar(float angle, float magnitude); // ... }; 这不是构造函数,而是带我使用静态工厂方法……这实际上意味着我正在以某种方式实现工厂模式(“类成为自己的工厂”)。这看起来不错(并且将适合此特定情况),但是在某些情况下会失败,这将在第2点中进行描述。请继续阅读。 …



7
设计模式:工厂vs工厂方法vs抽象工厂
我正在从网站上阅读设计模式 我在这里读到了有关Factory,Factory方法和Abstract工厂的信息,但是它们是如此混乱,在定义上不清楚。根据定义 工厂-创建对象而不将实例化逻辑暴露给客户端,并通过通用接口引用新创建的对象。是Factory Method的简化版本 工厂方法-定义用于创建对象的接口,但让子类决定要实例化的类,并通过通用接口引用新创建的对象。 抽象工厂-提供用于创建相关对象族的接口,而无需显式指定其类。 我还查看了有关抽象工厂与工厂方法的其他stackoverflow线程,但是在那里绘制的UML图使我的理解更糟。 谁能告诉我 这三种模式有何不同? 什么时候使用? 还有可能的话,是否有与这些模式相关的Java示例?

10
设计模式:抽象工厂与工厂方法
注意:问题在帖子末尾。 我已经阅读了有关Abstract Factory vs Factory Method的其他stackoverflow线程。我了解每种模式的意图。但是,我对该定义不清楚。 Factory Method定义了一个用于创建对象的接口,但是让子类决定要实例化的对象。工厂方法使类将实例化延迟到子类。 相比之下,抽象工厂提供了一个接口,用于创建相关或相关对象的族,而无需指定其具体类。 - 约翰·费米内拉 该抽象工厂看起来非常相似的工厂方法。我画了一些UML类来说明我的观点。 注意: 该图来自www.yuml.com,因此它们的方向不完全正确。但它是免费的服务:)。 这些图可能并不完美。我仍在学习GoF设计模式。 工厂方法: 抽象工厂(仅1个成员): 抽象工厂(更多成员): 问题: 如果抽象工厂只有一个创作者和一个产品,那么它仍然是抽象工厂模式吗?(用于创建家族的界面) 可以从接口创建Factory Method具体创建器,还是必须从类创建它?(类将实例化延迟到子类) 如果抽象工厂只能有一个创建者和一个产品,那么抽象工厂和工厂方法之间的唯一区别是前者的创建者是一个接口,后者的创建者是一个类吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.