问题标签 [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 回答
18457 浏览

design-patterns - 工厂模式 - CreateInstance 是否静态?

这是关于工厂模式的。我有点困惑。

我看到了createInstance()方法是静态的实现和一些非静态的实现。

有人说这取决于“风格”或“品味”,有人说不是。根据四人帮的说法,维基百科说它应该是非静态的, http: //www.dofactory.com/Patterns/PatternFactory.aspx也说它应该是非静态的。

我的问题是:它是否取决于风格和品味,或者如果它以静态方式实现,它是否违反了工厂模式?什么是对的?

0 投票
1 回答
696 浏览

java - 使用 Spring 3.0 配置 Google App Engine 实体管理器

我正在尝试为一些基本的 Google App Engine 服务编写 Spring 配置。特别是对于 EntityManagerFactory 和 Entity Manager。

从 Java 代码创建 EntityManagerFactory:

我将其翻译为:

每次我需要一个 EntityManager

但我不知道如何将工厂方法应用于先前创建的工厂。

有谁知道?谢谢。

0 投票
2 回答
688 浏览

c# - 在 C# 中使用委托作为“工厂方法”进行单元测试

问题

让我们“画”出一幅情景图:

  • 我有一个 SUT。(有一件好事:P)
  • 我可以在我的 SUT 上注入一些依赖项。
  • 在我做的一个方法中:new OtherClass(ParametersObtainedFromDependancies)。
  • 我想在我的 SUT 中对该方法进行单元测试,而无需处理创建对 OtherClass 正常工作有意义的模拟对象的复杂性。这意味着要测试 OtherClass。

我对此的解决方案是使用委托的工厂方法:

坏处:它是公开的。您可以将其视为一个可选依赖项,如果需要,您可以覆盖它。但无论如何,公众的气味。

好处:我不需要创建将覆盖此方法的 MyTestSUT,甚至不需要在 SUT 上使用模拟来覆盖该方法。

问题

有没有更好的解决方案?它是否正确?

0 投票
1 回答
394 浏览

php - PHP 严格标准:这段代码有什么问题?

可能重复:
为什么 PHP 5.2+ 不允许抽象静态类方法?
为什么不能在 PHP 中从抽象类中调用抽象函数?

我在PHP 5.3.8上运行此代码:

并收到以下错误:

严格标准:静态函数 Geometry::fromArray() 不应该是抽象的

  • 这种方法有什么问题?
  • 强制具体类实现此工厂方法的任何可行替代方案?
0 投票
1 回答
184 浏览

c# - C#中的工厂创建方法?

我正在开发一个提供一些 ActiveX COM 对象的 API,我在下面阅读了这些警告:

“您必须使用工厂的“创建”方法来创建本节中的 COM 对象。一旦通过工厂方法创建了 COM 对象,该 COM 对象就会绑定到相应的 TWS COM 对象(COM 对象的一个​​实例) . 不要尝试将 COM 对象传递给 TWS COM 对象的另一个实例。”

这些话来自此 ActiveX API 上的 VB 示例的一部分。现在我正在使用c#,我应该怎么做才能遵循这个规则?

0 投票
1 回答
502 浏览

java - 参数化工厂方法模式

解释很长,但示例非常简单和基本。

我想通过工厂方法模式创建一个 Reader 对象,因为实际上我有一个 IniReader 和一个 XmlReader,它们都是 Reader 的子类。
具体类的选择是在运行时根据文件的类型进行的,将来应用程序应该处理其他文件格式。

我的问题是:对于这个简单的问题,尝试应用工厂方法模式是否有意义?

应用这种模式的尝试导致了只包含一个new MyObject()调用的退化类。有时“简单”意味着“将来可以轻松更改而不会破坏客户端”,我认为 getter/setter 方法通常是单行的。但情况似乎并非如此。

我非常基本的实现:

然后,在我的工厂方法模式的核心,我有一个抽象的 ReaderCreator:

及其两个具体子类:

此时,我需要确定我拥有的文件,实例化正确的 ReaderCreator 并让它实例化正确的阅读器。
我很想为 ReaderCreator 抽象创建一个参数化的工厂方法(因此该方法必须是静态的),如下所示:

但这不是参数化的工厂方法,而是工厂模式的另一种“工厂方法”习语。
尽管如此,在我看来,这似乎是该模式最明显的实现。我刚刚将在 IniReaderCreator 和 XmlReaderCreator 之间决定的方法(可能在客户端)引入 ReaderCreator。

参数化工厂方法确实有些不同,因为它声明 ReaderCreator 的所有子类都重新实现了在 IniReader 和 XmlReader 之间选择的决策者算法,在这种情况下显然是荒谬的(实现create返回 IniReader 的方法的 XmlReaderConstructor? )。

0 投票
1 回答
2827 浏览

java - 工厂方法 VS 工厂对象

据我了解,工厂方法是简单工厂,工厂对象是抽象工厂?和:

-工厂方法(简单工厂):

工厂对象(抽象工厂):

?

我对吗?

工厂模式有多少实现,它们有什么区别?

0 投票
5 回答
3275 浏览

c# - 从泛型方法返回对象作为接口

我有一个接口InterfaceBase和一些从它派生的接口Interface1, Interface2。接下来我有实现InterfaceX接口的类,而不是基础类。

现在,我是泛型的初学者,在这方面有很多新方法在我的脑海里弄得一团糟:(。我想创建工厂(静态类),我称之为

这是我的(示例)工厂实现,它不起作用:

我想要实现的是从应用程序的其余部分隐藏类(它们是 Web 服务处理程序)以轻松交换它们。我想使用工厂,因为类将是单例,它们将存储在工厂内的字典中,因此工厂可以通过这种方法将它们传播到应用程序中,但作为接口..也许我没有正确使用约束是我做错事了?我的方法不好吗?有没有更好的东西,也许整个架构应该重新设计?图表以更好地显示架构。工厂不在里面

0 投票
1 回答
966 浏览

c#-4.0 - StructureMap 实例工厂方法

我正在尝试注册一个工厂方法来创建开放泛型类型的实例MongoCollection<>。但是,当我GetInstance看起来它使用的是 MongoCollection 的构造函数而不是工厂方法时。

然后我做

当我运行该GetInstance行时,它永远不会在工厂方法中遇到断点,但它会抛出一个StructureMapException说法“没有为 PluginFamily MongoDb.Driver.MongoServerSettings 定义默认实例”。有一个构造函数MongoCollection需要 a MongoServerSettings,但我不希望结构映射使用该构造函数,我希望它使用我的工厂方法。

任何想法为什么它不使用工厂方法?这是一个错误吗?

0 投票
2 回答
538 浏览

objective-c - 如何检测目标c静态方法中的调用类

如何从静态方法中检测调用类,以便如果该类是子类,则检测到子类?(见 MakeInstance 内的评论)