问题标签 [factory-pattern]

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 回答
1022 浏览

ruby-on-rails - Ruby-on-Rails 中的模型继承、工厂模式和自解析

我正在与一个网站合作,该网站将从许多不同的来源中提取提要,然后将这些流保存到一个通用模型中,在这种情况下是一个特征。FeedEntry 类中的代码示例可能是:

诚然,我是java出身,在java这里,我会设置一个继承层次结构,然后在FeedEntry的每个子类上扩展parse方法,让每个FeedEntry都知道如何解析自己。所以我的问题是:
1)这是一个可行的计划吗?
2)如果是这样,是否只包含一个基本上是“类型”的列,说明 FeedEntry 是什么子类?
3)如果没有,对 DRYest 方法有什么建议吗?

谢谢!

0 投票
3 回答
824 浏览

c# - IDisposable 的享元和工厂问题

我似乎在精神上陷入了享元模式的困境。

首先,假设我有一个一次性类型DisposableFiddle和一个工厂FiddleFactory

然后,在我看来,客户很清楚FiddleFactory工厂声称对创建的小提琴没有所有权,并且客户有责任在处理完小提琴后处理它。

但是,假设我想通过使用享元模式在客户端之间共享小提琴:

然后我觉得在道德上有义务让工厂本身是一次性的,因为它创造了小提琴并在他们的一生中保持对它们的引用。但这会给假设他们拥有小提琴并因此应该处置它们的客户带来问题。

问题实际上是我调用工厂FiddleFactory而不是,说,FiddlePool和“创建”方法CreateFiddle而不是GetFiddle?像这样:

然后,客户就更清楚它不会拥有返回的小提琴,并且处理小提琴是池的责任。

还是只能通过文档轻松解决?

有没有办法摆脱困境?甚至有两难境地吗?:-)

0 投票
2 回答
308 浏览

java - 这是工厂模式的完美问题吗?

我想以一定的灵活性设计我的应用程序的文件存储部分,以便可以将文件存储在 S3 或 Web 服务器的硬盘上。

我还希望这在每个用户的基础上都是灵活的,因此在他们的用户设置中,他们可以选择是否要将他们的文件存储在 S3 或服务器文件系统中。

我在想这样的事情:

然后我会有一个看起来像这样的方法:

这有意义吗?(我是 ac# 程序员,但我将在 Java 中执行此操作)

我正在使用 Spring,但我认为这里不会使用 DI,因为每个用户的实现都会发生变化。

0 投票
1 回答
229 浏览

castle-windsor - 有没有更好的方法来使用 Castle Windsor 的工厂 API?

我对其他 IoC 容器持开放态度,例如 NInject 和 StructureMap,如果它们比这更干净的话。我听说 StructureMap 刚刚引入了可以简化这一点的“容器”,也许?

正如标题所说,有没有更好的方法?这看起来像很多代码,只是为了注册一个需要工厂来创建它的对象。

Versas 添加组件的“非工厂”方式:

第一个似乎过于复杂。

提前致谢!

0 投票
5 回答
50629 浏览

design-patterns - 工厂方法模式的真实示例

我刚读了工厂方法。我知道它提供了一种将实例化委托给子类的方法。但我无法理解在现实世界场景中的可能用途。

谁能举一个典型的例子来说明如何使用工厂方法模式,以便我可以与我所读的内容联系起来。

哪个工厂方法模式是最佳解决方案的问题陈述足以说明问题。

0 投票
2 回答
141 浏览

c# - Ideatryout:类型化的Providerfactory

几天来,我一直在考虑在 C#.NET (4.0RC) 中启动一个新项目。该项目的最终结果将是一个类库,其中包含我现在称之为“ProviderFactory”的东西、几个接口(或抽象类)和一个或两个默认的“ProviderType”。

首先,我可能需要/决定更改我的类的命名,以免与 .NET 中已有的内容发生冲突。其次,我在这里描述的内容很有可能已经存在(它甚至可能在我不知道的情况下本机在 .NET 中),所以如果是这种情况,将不胜感激单个链接到该项目或教程。

我正在考虑的功能不仅仅是一个可以为我提供简单Provider的工厂,它应该能够生成任何类型的Provider。我希望能够写出这样的东西:

它应该返回当前选择的 BlogProvider,如果没有,则返回 null。此外,我希望能够提供一种类型的所有可用提供者的列表,例如

它应该返回一个带有博客提供者的字符串数组(如“ODB​​CBlogProvider”、“XMLBlogProvider”等)。我还需要能够设置当前的提供者,例如这样:

这应该使当前的 BlogProvider 成为 ODBCBlogProvider,这样下次我调用 ProviderFactory.GetProvider() 时它应该返回一个 ODBCBlogProvider 的实例(这需要扩展 BlogProvider 基类)。

此外,每个 ProviderType(或 ProviderBase,如果您愿意)都需要有一个 ProviderTypeName (BlogProvider) 和一个 ProviderTypeDisplayName(“博客”或“博客提供者”),该 ProviderType 是唯一的,并且每个扩展该提供者的 Provider 都需要有一个ProviderName (ODBCBlogProvider) 和一个 ProviderDisplayName(“ODBC”或“ODBC blog”等)。为简单起见,ProviderName 和 ProviderTypeName 可以是通过反射获得的类名。

这可能意味着我需要一个 ProviderBase 接口,如下所示:

对于 BlogProvider,我需要创建一个抽象类来实现这两个成员,并为实际的 BlogProviders 创建方法来覆盖。

然后,在我的代码中的某个地方,我不得不运行类似的东西

或者更好的选择是能够使用这样的属性:

我认为不需要使用这种方法使用抽象类,因为不需要在基类中设置任何成员。也不再需要 ProviderBase 接口。理想的原因是 ProviderFactory 可以找到包含 ProviderAttribute 的所有类/接口,而 ODBCBlogProvider 只需要实现 BlogProvider,但我不确定我是如何做到这一点的,尤其是当它是一个要求时提供者和提供者类型都可以用于外部程序集。

ProviderFactory 的另一个要求是它应该在无状态环境和保持活动状态的环境中都可以工作,因此它应该能够将设置保存到某些配置文件/流/数据库(类似的东西,不t 真的很重要)在初始化时更改和加载,但这应该是可选的。因此它也可以在网络上运行(在您自己的机器上拥有一个博客并没有太大意义)。

另一个要求是提供者可能需要其他提供者才能工作。例如,AudiEngine 可能只能与 AudiCar 一起使用,但 AudiCar 可以完美地与 BmwEngine 一起运行。

另外(我还不确定把它放在哪里,也许是提供者类本身的一个可选属性)每个提供者都应该可以选择是否为单例。

这就是我现在能想到的。任何关于如何实现或天气已经有实现的输入将不胜感激,并且任何东西都可以更改,因为我还没有编写任何代码,这就是我现在一直在考虑的事情。

0 投票
5 回答
420 浏览

c++ - 关于工厂模式的问题

我有一个工厂类来构建基类 B 的对象。使用该工厂的对象 (D) 接收代表实际类型的字符串列表。什么是正确的实现:

  1. 工厂接收一个 Enum(并在 Create 函数中使用 switch),D 负责将字符串转换为 Enum。
  2. 工厂接收一个字符串并检查与一组有效字符串的匹配(使用 ifs')
  3. 我没有想到的其他实现。
0 投票
9 回答
58713 浏览

wcf - 如何将值传递给我的 wcf 服务的构造函数?

我想将值传递给实现我的服务的类的构造函数。

但是 ServiceHost 只允许我传递要创建的类型的名称,而不是传递给它的构造函数的参数。

我希望能够传入一个创建我的服务对象的工厂。

到目前为止我发现了什么:

0 投票
9 回答
2252 浏览

language-agnostic - 为什么存在静态 Create 方法?

我想知道,为什么Create存在静态方法?

例如,为什么使用此代码:

在这段代码上:

我找不到使用一个而不是另一个的理由,也找不到使用这个构造的类之间的任何关系。

任何人都可以对此有所了解吗?

0 投票
2 回答
1168 浏览

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

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

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

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

这可能吗?