问题标签 [factory]

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 投票
10 回答
4905 浏览

c# - 抽象工厂设计模式

我正在为我的公司开发一个内部项目,该项目的一部分是能够将 XML 文件中的各种“任务”解析为稍后运行的任务集合。

因为每种类型的任务都有许多不同的关联字段,所以我决定最好用一个单独的类来表示每种类型的任务。

为此,我构建了一个抽象基类:

每个任务都继承自该基类,并包含从传入的 XmlElement 创建自身以及将自身序列化回 XmlElement 所需的代码。

一个基本的例子:

然后解析器将使用与此类似的代码来创建任务集合:

所有这些都非常有效,并且允许我使用基类来传递任务,同时保留每个任务具有单独类的结构。

但是,我对 TaskFactory.CreateTask 的代码不满意。此方法接受一个 XmlElement,然后返回相应 Task 类的一个实例:

因为我必须解析 XMLElement,所以我使用了一个巨大的(实际代码中的 10-15 例)开关来选择要实例化的子类。我希望我可以在这里做一些多态技巧来清理这个方法。

有什么建议吗?

0 投票
18 回答
183623 浏览

design-patterns - 工厂模式。什么时候使用工厂方法?

什么时候在对象中使用工厂方法而不是工厂类是个好主意?

0 投票
18 回答
6844 浏览

java - 重构Java工厂方法

这段代码有一些非常不满意的地方:

我对多个出口点毫不后悔——结构很清楚。但我对这一系列几乎相同的 if 语句并不满意。我考虑过将字符串映射到命令:

...然后使用反射使适当类的实例从地图中查找。然而,虽然在概念上很优雅,但这涉及到相当多的反射代码,继承此代码的人可能不会欣赏 - 尽管该成本可能会被收益所抵消。将值硬编码到 commandMap 中的所有行的气味几乎与 if 块一样糟糕。

如果工厂的构造函数可以扫描类路径以查找 Command 的子类,查询它们以获取字符串表示形式,并自动将它们添加到其曲目中,那就更好了。

那么 - 我应该如何去重构呢?

我想那里的一些框架免费给了我这种东西。假设我无法将这些东西迁移到这样的框架中。

0 投票
5 回答
3306 浏览

python - 哪个更pythonic,工厂作为模块中的函数,还是作为它创建的类的方法?

我有一些 Python 代码基于从 iCalendar 文件解析的 VEvent 对象创建日历对象。

日历对象只有一个方法,可以在解析事件时添加事件。

现在我想创建一个工厂函数,从文件对象、路径或 URL 创建日历。

我一直在使用iCalendar python 模块,它直接在返回实例的 Class 上实现工厂函数作为类方法:

根据我对 Java 的了解,这是 Java 代码中的一种常见模式,尽管我似乎发现更多对工厂方法的引用位于与您实际要从中实例化实例的类不同的类上。

问题是,这也被认为是 Pythonic 吗?还是仅仅创建一个模块级方法作为工厂函数是否被认为更pythonic?

0 投票
1 回答
600 浏览

unit-testing - 从 MbUnit 迁移到 MsTest 时的问题

我们的团队正在寻求从使用 mbunit 切换到 mstest,但两者之间似乎存在一些脱节。

有谁知道在使用 mstest 时如何从 mbunit 模拟 CombinatorialTest 和 Factory 属性?

我认为这是我们在进行转换之前唯一的绊脚石。

0 投票
3 回答
862 浏览

c# - 工厂类 - 我应该在这里用数据填充我的对象吗?

我正在创建一个将构造并返回一个对象的工厂类。我通常会在数据访问层做所有的数据工作,但我认为我无法达到我的目标并且仍然这样做。我想要做的是使用 SQLDataReader 快速读取数据信息并填充要从工厂返回的对象。这是一个愚蠢的想法吗?有更好的方法吗?如果可能的话,我宁愿不只从 DAL 返回一个 DataSet,还是性能与可维护性的问题?

0 投票
3 回答
909 浏览

c# - 工厂类 - 保存对象

我有一个用数据填充对象的工厂类。我想从对象实现保存,但不想用 db 填充对象 - 让创建类的工厂也保存数据是愚蠢的吗?

即:在我的对象上的 .Save() 方法中,我将调用 Factory.Save(myObject);

0 投票
2 回答
2221 浏览

design-patterns - 多态与继承(示例问题案例)

我仍在尝试围绕设计模式进行思考,并且第二次遇到同样的问题,似乎急需一种模式解决方案。

我有一个具有多种帐户类型的帐户系统。我们有餐厅、酒店、service_provider 和消费者帐户类型。相信未来还会有更多的企业账户类型,当然还有全局管理员账户。

所以我想知道的是如何实现账户类型的切换。例如。每个帐户将有一个或多个配置文件,但配置文件将根据帐户类型而有所不同。我应该在这里使用什么样的类关系来处理多种类型的帐户 - 多态性或继承?

似乎应该有一个其他配置文件应该扩展的抽象基本配置文件类,但我不确定如何实现它(例如配置文件类型和帐户类型之间的连接表?)。

这也感觉像是一个实现工厂模式的机会,我只是不确定如何去做。

请问有什么想法吗?

编辑以提供一些建议的示例:

配置文件因帐户类型而异,例如,餐厅类型的帐户将有菜单、酒单等,酒店类型的帐户将具有房间类型、设施,消费者类型的帐户将具有个人品味, 本国等

问题是哪种设计模式最能实现这些关系。

希望那更清楚,谢谢!

0 投票
9 回答
23471 浏览

c++ - 在 C++ 中返回对象

从类返回对象时,什么时候释放内存合适?

例子,

如果我创建一个 Animal Lister 实例并从中获取 Animal 引用,那么我应该在哪里删除它?

这里的问题是 AnimalLister 没有办法跟踪创建的动物列表,所以我如何更改此类代码的逻辑以删除创建的对象。

0 投票
5 回答
2546 浏览

c# - 基于 Typeof 的工厂或者是

在下面的代码中,我想根据另一个类的类型返回派生类,这是一种更优雅的方式。