问题标签 [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 投票
3 回答
1408 浏览

domain-driven-design - 聚合根的工厂方法签名

我想编写一个工厂方法来实例化一个作为聚合根的实体。

该方法应该接受聚合的子实体和值作为实例化对象,还是应该只接受原始类型?

例如,如果我有一个由处理器和内存对象组成的实体计算机,工厂方法是否应该采用以下形式:

或者

这只是品味问题,还是这里有任何认真的考虑?

0 投票
5 回答
706 浏览

c# - 这是一个好的工厂方法实现吗?

我正在开发一个需要严格解耦接口的模块。具体来说,在实例化根对象(数据源)之后,用户只应该通过接口与对象模型进行交互。我有实际的工厂对象(我称它们为提供者)来提供实现这些接口的实例,但这留下了获取提供者的笨拙。为此,我在数据源上提供了几个方法:

我已经动态修改了一些细节以简化(例如,这个代码片段不包括传递给创建的实现实例的参数)。这是在 C# 中实现工厂方法的一种很好的通用方法吗?

0 投票
7 回答
544 浏览

language-agnostic - 我的工厂方法是否做得过火了?

我们核心产品的一部分是网站 CMS,它使用各种页面小部件。这些小部件负责显示内容、列出产品、处理事件注册等。每个小部件由派生自基本小部件类的类表示。渲染页面时,服务器从数据库中获取页面的小部件,然后创建正确类的实例。工厂方法对吗?

无论如何,这一切都很好,但随着时间的推移,小部件类型的数量已增加到大约 50 种,这意味着工厂方法相当长。每次我创建一种新类型的小部件时,我都会在该方法中添加另外几行代码,然后我的脑海中就会响起一个小警报,这可能不是最好的做事方式。我倾向于忽略那个警报,但它越来越响亮。

那么,我做错了吗?有没有更好的方法来处理这种情况?

0 投票
3 回答
3883 浏览

design-patterns - 工厂方法模式是否违反了开放/封闭原则?

工厂方法模式(不要与工厂或抽象工厂模式混淆)是否违反了开放/封闭原则

更新:为了澄清,我指的是具体类上有静态工厂方法的场景。例如(这来自 FMP 上的 Wikipedia 页面):

私有构造函数不会阻止类被子类化,即扩展吗?

难道不需要修改类来支持新的工厂方法吗?例如,如果该类最初只有 fromCartesian 而后来需要 fromPolar,那么是否必须修改该类以支持这一点?

这两个都不违反开/关吗?

0 投票
3 回答
640 浏览

c# - “产品”中的抽象方法 - 工厂方法 C#

我有一个用 C# 编写的简单类库(COM+ 服务)来使用 5 个 Web 服务:加、减、除、乘和比较。

我创建了抽象产品和抽象工厂类。抽象产品名为 WS 的代码:

如您所见,当其中一个子类继承 WS 时,必须重写这两种方法,这在某些子类中可能没有用。例如,比较不需要Calculate() 方法。

为了实例化一个新的 CompareWS 对象,客户端类将调用 CreateWS() 方法,该方法返回一个 WS 对象类型。

但是如果在 WS 中没有定义 Compare(),则无法调用 Compare() 方法。这是因为客户端将使用 WS 类型对象,而不是 CompareWS 对象。

这只是一个有两种方法的例子,但是如果有更多方法呢?在 WS 类中将所有方法都定义为抽象是愚蠢的吗?

我的问题是:我想定义 WS 的所有子类共有的抽象方法,而当工厂创建 WS 对象类型时,可以调用子类的所有方法(WS 的重写方法以及子类中的方法)。我该怎么做?

0 投票
2 回答
1168 浏览

vb.net - 如何创建泛型构造函数?(即 BaseClass.FromXml( )

我不确定如何描述这一点,但我正在尝试创建一个包含名为 FromXml 的共享(工厂)函数的基类。我希望此函数实例化正确类型的对象,然后通过 XmlDocument 填充它。

例如,假设我有这样的事情:

我希望能够做这样的事情:

这可能吗?

0 投票
3 回答
838 浏览

.net - 如果我有一个工厂方法需要不同的参数用于不同的实现,我该怎么办?

我有一个接口IMessage和一个类,它有几种创建不同类型消息的方法,如下所示:

我不希望这个类完成创建这些消息的所有工作,所以它只是委托给 a MessageCreatorFactory ,它根据给定的类型产生一个IMessageCreator(基于消息类型 A、TypeB、TypeC 等的枚举)

所以我有 4 个实现IMessageCreatorTypeAMessageCreator, TypeBMessageCreator, TypeCMessageCreator,TypeDMessageCreator

我对此表示满意,除了因为每种类型需要不同的参数,我必须创建一个MessageParams对象,其中包含 4 个不同参数的 4 个属性,但每个IMessageCreator.

有没有替代方案?我的另一个想法是将参数数组作为 Create 方法中的参数,但这似乎更糟,因为您不知道参数是什么。或者在接口中创建多个 Create 重载,如果它们不适合该特定实现,则让它们中的一些抛出异常(即,您调用了需要更多参数的方法,因此您应该调用其他重载之一。)

这看起来好吗?有更好的解决方案吗?

0 投票
1 回答
735 浏览

java - 工厂方法实现

我正在浏览 SO 中的“工厂方法”页面,并遇到了这个链接。而这个评论。该示例看起来是一个变体,并被认为以其原始方式实现:将实例化推迟到子类......

这是我的尝试。以下代码是否实现了链接中指定示例的工厂模式?请验证并建议这是否必须进行任何重构。

0 投票
4 回答
373 浏览

c++ - 工厂方法是否适合我的问题?

这是我的问题,我正在考虑在 C++ 中使用工厂方法,你有什么意见?

有一个基类和许多子类。

我需要通过 TCP 在网络上传输对象。

我将在第一侧创建对象,并使用该对象创建一个字节数组 TCP 消息,并将其发送到另一侧。

另一方面,我将分解 TCP 消息,创建对象并将该对象添加到多态队列中。

0 投票
2 回答
1059 浏览

factory - Smalltalk 相当于工厂方法?

Smalltalk 中是否使用了工厂方法,如果是,应该如何编写一种方法,而不是在 Java 中使用工厂方法?谢谢。