问题标签 [factory-method]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
136 浏览

python - 以类属性为参数的方法工厂

我发现创建在某些逻辑中包装参数化对象属性的“方法工厂函数”很有用。

例如:

是否有必要将属性make_fisher作为字符串传递,还是有更好的方法来做到这一点?

如果我传递并使用一个实际属性,这将破坏多态性,因为 的实例two仍将使用对属性对象的相同引用。

IE

必须使用字符串来引用属性似乎有点弱,但我没有看到另一种方法来做到这一点。在那儿?

0 投票
8 回答
3154 浏览

c++ - 工厂方法反if实现

我在我的 C++ 项目中应用了工厂设计模式,您可以在下面看到我是如何做到的。我尝试通过遵循“反 if”活动来改进我的代码,因此想要删除我拥有的 if 语句。知道我该怎么做吗?

我会想象创建一个地图,以字符串为键,以及构造函数(或创建对象的东西)。之后,我可以使用类型(类型是字符串)从映射中获取构造函数,并在没有任何 if 的情况下创建我的对象。(我知道我有点偏执,但我想知道是否可以做到。)

0 投票
1 回答
2201 浏览

java - 使用静态工厂类生成 GUI 组件 - 如何以及在何处添加所需的侦听器?

我想使用工厂类和方法来生成 GUI 组件,但我不知道应该如何以及在哪个类中声明各种侦听器并将其添加到组件中。

如果我有一个简单的工厂类,例如下面列出的,我应该在按钮返回到调用类之前添加一个 ActionListener 到按钮。如果答案是“是”,那么如何添加侦听器?

假设我想使用 getJButton() 方法向 GUI 添加 5 个按钮,我将如何编写 ActionListener 以便它知道单击了哪个按钮?

还是应该在调用类中添加监听器?

我试过以下

并得到一个错误:

此处不允许使用“void”类型。

0 投票
6 回答
6963 浏览

design-patterns - 抽象工厂、工厂方法、生成器

似乎这是一个骗局,但请耐心等待 - 我保证我已经阅读了相关的帖子(和GOF 书)。

在我阅读完所有内容之后,我仍然不清楚何时使用抽象工厂、工厂方法或构建器。我相信,在我看到一个问题的简单示例后,它最终会深入人心,这个问题最好由构建者解决,而使用抽象工厂显然是愚蠢的。

你能提供一个简单的例子,你会清楚地使用一种模式而不是其他模式吗?

我知道如果这个例子太简单,它可能归结为一个意见问题,但我希望如果有人可以,那个人就是这样。

谢谢。

0 投票
3 回答
451 浏览

vb.net - 谁能发现这个 VB.Net 代码的问题?

我正在 VB.Net 中编写一些代码,我希望向同事展示(更不用说让自己更熟悉一点)各种设计模式 - 我遇到了 FactoryMethod 模式的问题。

这是我的代码:

当我尝试编译它时,我在 CarFactory.CreateCar 中收到错误 (BC30311),告诉我它无法将 Fiesta、Mondeo 和 Focus 转换为 Car。我不明白问题出在哪里——它们都是 Car 的子类。

毫无疑问,我忽略了一些简单的事情。谁能发现它?

干杯,

马丁。

0 投票
2 回答
523 浏览

ruby - 如何在 Ruby 中创建“类集群”(具有具体子类实例的工厂类)?

我想创建一个抽象类,它将根据初始化参数创建具体实例。例子:

然后我想要 FooSomething <SomethingGeneric、BarSomething <SomethingGeneric 等等。然后当我这样做时:

我会得到 FooSomething 实例。

我的问题是“新”方法。我已经定义了SomethingGeneric.new,但是FooSomething 和BarSomething 是SomethingGeneric 的子类,因此它们继承了“新”方法,该方法在这里用错误的参数调用:

解决方案之一是为工厂方法“new”使用另一个名称。但是,我想坚持方便并保留名为“new”的抽象超类工厂方法。

解决这个问题的最干净的正确方法是什么?

0 投票
1 回答
6478 浏览

java - java参数化通用静态工厂

是否可以在 Java 中创建一个使用接口作为参数化类型的静态工厂方法/类并返回该给定接口的实现类?

尽管我对泛型的了解有限,但这是我想做的:

我想限制客户端代码仅将接口“类型”插入从我指定的工具接口扩展的 getInstance() 方法中。这样我就可以确定插入的工具类型是合法工具。

客户端代码应如下所示:

工厂应该打开接口的类型(不管它是否为空),在工厂询问之前定义。我知道这不会像我写的那样工作,但我希望其中一位读者知道我想要完成什么。

getInstance方法的返回类型和传入的参数一样,所以在传递一个Parser接口的时候,也会返回一个Parser p = new ParserImpl(); 返回 p;

提前感谢您帮助我。

0 投票
10 回答
65773 浏览

design-patterns - 设计模式:抽象工厂与工厂方法

注:问题在文末。

我已经阅读了有关Abstract Factory vs Factory Method的其他 stackoverflow 线程。我了解每种模式的意图。但是,我不清楚定义。

工厂方法定义了一个用于创建对象的接口,但让子类决定要实例化哪些接口。工厂方法允许类将实例化推迟到子类。

相比之下,抽象工厂提供了一个接口,用于创建相关或依赖对象的系列,而无需指定它们的具体类。

——约翰·费米内拉

抽象工厂看起来与工厂方法非常相似。我画了几个 UML 类来说明我的观点。

笔记:

  • 该图来自www.yuml.com,因此它们的方向并不完美。但它是一项免费服务:)。
  • 图表可能并不完美。我仍在学习GoF设计模式。

工厂方法:

工厂方法

抽象工厂(只有 1 名成员):

抽象工厂(仅 1 名成员)

抽象工厂(更多成员):

替代文字

问题:

  1. 如果抽象工厂只有一个创造者和一个产品,那还是抽象工厂模式吗?(创建家庭的界面)
  2. 工厂方法具体创建者可以从接口创建还是必须来自类?(类将实例化推迟到子类)
  3. 如果抽象工厂只能有一个创建者和一个产品,那么抽象工厂工厂方法的唯一区别是前者的创建者是一个接口,后者的创建者是一个类吗?
0 投票
3 回答
467 浏览

design-patterns - 工厂模式中的参数化工厂 - 是否存在其他方式?

我正在阅读 Go4 设计模式书,目前正在研究工厂方法模式。这本书在 Pg:110 上提到

“工厂模式的另一种变体让工厂方法创建多种产品。工厂方法采用一个参数来标识要创建的对象的种类”

现在工厂不总是生产多种产品吗?另外,是否总是需要发送参数来决定要创建什么样的产品?我的意思是,如果我们不传递参数,工厂将如何决定创建哪个对象?他们所说的另一个变化是什么意思?我在这里错过任何一点吗?

0 投票
0 回答
1029 浏览

c#-4.0 - XamlWriter 的 C# 对象 Xaml 工厂方法

我的班级使用图像作为属性 ( public Image myImage)。当这个类被序列化(XamlWriter)它工作正常,读回它会给出一个异常:

'在类型'System.Drawing.Bitmap'上找不到匹配的构造函数。您可以使用 Arguments 或 FactoryMethod 指令来构造此类型。行号“5”和行位置“8”。

显然,以 ColorPalette 作为参数的 Bitmap 缺少一个构造函数:

我知道我可以指定一个以某种方式创建位图的工厂方法。我还发现了一些关于指令的文章,例如http://www.wpftutorial.net/XAML2009.html

但是,我不是专家,Xaml也不了解如何以及在何处定义/声明我的属性的方法。不幸的是,我也没有找到一个例子。

我期待一些喜欢

但实际上一无所获。你知道任何想法/例子吗?