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

c# - 使用泛型来实例化对象的工厂类是个好主意吗?

使用泛型来实例化对象的工厂类是个好主意吗?

假设我有一个类 Animal 和一些子类(Cat、Dog 等):

然后在我的代码中,我会像这样使用 AnimalFactory:

0 投票
2 回答
1211 浏览

c# - 如何在工厂中实现构造函数注入?

当您使用工厂模式时,如何在运行时将依赖项注入构造函数?

我正在构建具有不同格式的 Foos - boolean、array、freetext、matrix 等。随着我们发现 Foo 的不同用途,该格式列表将会增长。这是我的基本核心域:

IFoo 是为消费者上下文装饰的:

我不希望我的消费者直接实例化 Foo ,所以我强迫他们使用工厂:

即使这样,他们也需要从我的抽象工厂中为他们的特定上下文派生一个工厂。

我专门在 html 上下文中构建 foos,如下所示:

我的问题出在我的抽象 FooFactory 中:我总是将一个空值列表注入到我的 ArrayFooFormat 中。我希望能够从消费者那里传递一个值列表。对于其他 FooFormats,我想从消费者那里传递正确的构造函数参数。但我想让公共 API 保持简单——我不希望 BuildFoo() 上有一堆重载。

那么如何从 HtmlFooConsumer.DoSomeFoo() 内部将自定义值列表传递给 factory.BuildFoo<T>() 调用?任何想法,stackoverflow大师?

0 投票
5 回答
2054 浏览

c++ - 在 C++ 中注册派生类

编辑:小修复(虚拟打印;返回 mpInstance)在答案中的注释之后。

我正在尝试创建一个系统,在该系统中我可以从任何基类派生一个子类,并且它的实现应该替换基类的实现。

所有创建和使用基类对象的对象都不应改变它们创建或调用对象的方式,即即使它们实际创建了子类,也应继续调用 BaseClass.Create()。基类知道它们可以被覆盖,但它们不知道覆盖它们的具体类。

我希望所有子类的注册都在一个地方完成。

这是我的实现:

使用此实现,当我从其他类执行此操作时:

我希望在输出中得到“孩子”。

你觉得这个设计怎么样?我是不是把事情复杂化了太多,可以做得更容易?我可以创建一个从抽象类继承的模板吗?

我不得不使用 dynamic_pointer (否则没有编译) - 是否暗示有问题?

谢谢你。

0 投票
8 回答
1141 浏览

c++ - C++ 中的工厂和动态分配问题

我有一个工厂,可以在我的应用程序中构建生命周期最长的对象。比如说,它们具有ClientA依赖ClientBProvider(具有许多可能实现的抽象类)的类型,因此两个客户端都有对 Provider 的引用作为成员。

根据命令行参数,工厂选择一个实现Provider,构造它(用“ new”),并将它传递给两个客户端的构造函数。

工厂返回一个代表我的整个应用程序的对象。我的主要功能基本上是这样的:

buildApp方法基本上是这样的:

所以,当执行结束时,所有对象的析构函数都会被调用,除了提供者对象(因为它是用“ new”构造的)。

如何改进此设计以确保调用提供程序的析构函数?

编辑:澄清一下,我的意图是客户端、提供者和 App 对象共享相同的生命周期。在所有答案之后,我现在认为客户端和提供者都应该在堆上分配其传递给 App 对象的引用,该对象将负责在它死时删除它们。你说什么?

0 投票
3 回答
1045 浏览

.net - 请提供工厂模式建议

我正在努力在我的空闲时间通过在一个简单的数据存储项目中使用它来围绕工厂模式。这个想法是使用 VB.NET 中的简单工厂模式获取简单数据并将其保存到数据库中。我想我对模式本身有了基本的了解,但是,我正在努力解决的是如何将工厂类干净地融入架构中。对于这个项目,我有一个标准的 3 层架构,基本上看起来像这样:

介绍

商业

数据

常见的

接口

为了突出我在构建应用程序时遇到问题的特定场景,让我举个例子。假设在业务层中,我在 BusinessLayer.DataStorageAppName DLL 中创建了一个名为 Foo 的类。它有一个接口 IFoo,它位于 Interfaces.DataStorageAppName DLL 中。为了使用简单的工厂模式通过其接口 IFoo 创建类 Foo 的实例,现在,我在 BusinessLayer.DataStorageAppName 中创建了一个工厂类,并编写了一个共享/静态方法来通过 IFoo 接口给我一个实例。后来,据我了解,我可以决定换掉这个 Factory 类返回的对象,而无需做很多其他事情(理论上)。

言归正传,这是可行的,但似乎很奇怪的是,我现在被迫创建了几个工厂类:基本上每个 DLL 一个,这样我就可以避免循环引用。有没有一种更简洁的方法来实现这些工厂类,而无需使用诸如温莎城堡等 3rd 方解决方案。似乎我在这里错过了一个基本概念。如果您愿意的话,似乎应该可以在负责分发对象实例的体系结构中拥有一个“存储库”。

先感谢您!

0 投票
6 回答
17047 浏览

c++ - 工厂方法实现 - C++

我有以下用于“工厂”设计模式实现的代码。

但我听说可以使用“C++ 模板”以更好的方式完成。任何人都可以帮助它如何完成以及模板方法比这更好吗?

有什么想法吗

0 投票
2 回答
1483 浏览

domain-driven-design - 在模型视图 Presenter 和领域驱动设计项目中使用 Presenters 中的工厂

在域驱动设计中,使用工厂在域层中创建域对象似乎是一种很好的做法(而不是使用直接构造函数或 IoC)。

但是在表示层中使用域对象工厂呢?例如,假设我正在根据从演示者获得的用户输入创建域对象。

这是一个示例,假设我有一个配置域对象,该对象具有许多十进制设置。

公共类配置:PersistantObject {

}

为了在域层而不是演示者层中创建这个对象,我必须将这些十进制值中的每一个作为函数参数传递。创建一个笨拙的函数定义和调用。

即 ConfigurationService.CreateConfiguration(温度, ...(x20), 重力);

也许更好的解决方案是在演示者层创建配置对象,并直接从用户输入分配配置对象的所有值,跳过冗长的函数调用。

配置配置 = ConfigurationFactory.CreateNewConfiguration();

配置温度=温度;

..(x20).. = ...;

config.gravity = 重力;

ConfigurationService.SaveNewConfiguration(config);

但我想知道这种方法是否错误,为什么?如果这两种方法都是错误的,那么从用户输入创建长对象的最佳方法是什么?为什么?

谢谢!

0 投票
5 回答
2129 浏览

design-patterns - 您如何在领域驱动设计中使用具有工厂模式的接口?

默认情况下为您的域对象工厂使用接口是否有意义,或者是否应该只在需要时为工厂类保留接口?

0 投票
2 回答
1376 浏览

visual-studio-2008 - 验证():属性“工厂”不是元素“服务主机”的有效属性

我越来越

在我将 Factory="System.ServiceModel.Activation.WebServiceHostFactory" 添加到 .svc 文件中的 @Service 指令后,从 VS2008 在一个空的 WCF 服务应用程序中开始。我在代码隐藏中添加了 System.ServiceModel.Web 引用。

根据我在 MSDN 上阅读的内容,我完全不知所措。有没有人遇到过这个?

更新:

Factory 甚至不会在 .svc 文件的标记中显示为智能感知中的可用属性。

0 投票
9 回答
80264 浏览

python - Python中的类工厂

我是 Python 新手,需要一些建议来实现以下场景。

我有两个课程用于在两个不同的注册商处管理域。两者都有相同的接口,例如

我想创建一个域类,给定一个域名,根据扩展名加载正确的注册商类,例如

我知道这可以使用工厂函数来完成(见下文),但这是最好的方法还是使用 OOP 功能有更好的方法?