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

c# - A Disgusting Hack(使用反射的基类的工厂方法)

这是一件肮脏的事情,我为此感到肮脏:

在这里,我有类NonCompoundedInterestRate(抽象)并CompoundedInterestRate派生自抽象类InterestRate。我有几个具体的实现,NonCompoundedInterestRate它们具有使用适当签名命名的静态方法ImpliedRate,以使上述反射起作用。

使用反射来调用甚至不能保证在派生类上存在的静态方法只是臭气熏天。有没有更好的方法来处理这个?

0 投票
2 回答
1465 浏览

java - Spring formBackingObject、业务对象创建和工厂

在 Spring SimpleFormController 中使用业务对象作为 formBackingObjects 的设计问题。

我们的控制器的职责是允许最终用户向我们的 Web 应用程序添加新的业务对象。

所以我们通过 formBackingObject(HttpServletRequest request) 方法传递我们的业务对象。然而,我们遇到了一个难题。

我们用来创建新业务对象的工厂强制执行某些属性不能为空的业务规则。但是由于我们不知道最终用户想要输入什么,我们一直在传递“合理的默认值”,比如“请输入你想要的名称”,但这似乎充其量是 hackie/icky。

开发人员要做什么?我觉得这好像是经典的鸡/蛋问题。

我们所有的业务对象都是基于接口的,我们是否应该创建一个代表业务对象的存根,将存根作为 formBackingObject 传递,然后在表单提交时将存根传递给工厂?或者我们不应该在 formBackingObject 中传递任何东西,然后从请求中手动收集提交的信息?

还有其他合理的想法/模式吗?

感谢您的时间。

0 投票
3 回答
1487 浏览

c++ - 在 C++ 中建立一个带有对象存储库的工厂?

我想创建一个工厂来创建实现抽象接口的对象,这将返回对内部保存的对象的引用,并且不会复制对象。这个想法与 log4cxx/log4j Logger 类设计中的想法几乎相同。我还想尽可能多地向客户端隐藏细节,即查看暴露的 .h 文件不会显示私有成员等实现细节。示例:

我想知道是否有针对此类设计的已发布指南/示例代码,因为我不想重新发明轮子,而且这项任务很常见。我想过使用静态工厂方法、内部单例存储库以及对具体对象的智能指针/引用作为返回类型。问题:

  • 这种设计是否有简单的示例代码?(log4cxx的代码太复杂,不能作为骨架使用)
  • 假设他只看到定义的 encryptor.h 纯抽象类,我如何完全隐藏客户端的存储库Encryptor
  • 你会建议使用智能引用或指针作为返回类型吗?是否有智能参考的标准实现?
  • 任何其他建议将不胜感激

多谢!

0 投票
1 回答
4415 浏览

php - 单例与 PHP5 中的工厂模式结合

将单例设计模式与 PHP5 中的工厂方法模式结合使用的最佳方法是什么?我最简单的使用场景是每个数据库类型只实例化一次选择性数据库连接。

0 投票
3 回答
183 浏览

java - 我的工厂怎么了?

我有一些这样的代码:

但是 Eclipse 告诉我No enclosing instance of type Foo is accessible.那么我怎样才能让它工作呢?

我试图让它尽可能简单,看看它是否会编译:

我仍然得到同样的错误。我错过了什么?

固定的!我将线路更改return new FooImpl();return new Foo.FooImpl();

0 投票
4 回答
2208 浏览

.net - .NET Framework 中的构造函数与工厂

下面是一篇关于 .net 框架使用模式的文章。我不确定我是否理解下面摘录中的粗体部分。这是否暗示如果您更改创建对象的细节,您(可能)会更改构造函数参数?

在框架中有很多情况,您可以获取结构或类的新实例,而无需自己调用其构造函数。System.Convert 类包含许多像这样工作的静态方法。例如,要将整数转换为布尔值,您可以调用 Convert.ToBoolean 并传入整数。此方法调用的返回值是一个新的布尔值,如果整数非零,则设置为“true”,否则为“false”。Convert 类为您创建具有正确值的布尔值。其他类型转换方法的工作方式类似。Int32 和 Double 上的 Parse 方法返回这些对象的新实例,这些对象设置为仅给定一个字符串的适当值。

这种创建新对象实例的策略称为工厂模式。您可以要求对象工厂为您创建实例,而不是调用对象的构造函数。这样,工厂类可以隐藏对象创建的复杂性(例如如何从字符串中解析出 Double )。如果你想改变创建对象的细节,你只需要改变工厂本身;您不必更改代码中调用构造函数的每个位置。

来自:http: //msdn.microsoft.com/en-us/magazine/cc188707.aspx

0 投票
1 回答
2293 浏览

c# - 这是使用和测试使用工厂模式的类的正确方法吗?

我对工厂模式没有太多经验,我遇到过一个我认为有必要但我不确定我是否正确实现了该模式并且我担心它的影响的场景对我的单元测试的可读性有影响。

我创建了一个代码片段,它近似(从内存中)我正在工作的场景的本质。如果有人可以看看它,看看我所做的是否合理,我将不胜感激。

这是我需要测试的课程:

以下是一些基本的接口定义......

这是我创建的工厂。我目前的要求让我添加了一个特定的 Reducer MethodAReducer 以用于特定场景,这就是我尝试引入工厂的原因。

这些是两种实现的近似值......实现的本质是,如果对象处于特定状态,它只会减少数量。

这是我正在使用的测试夹具。让我担心的是工厂模式在测试中占用了多少空间,以及它似乎如何降低测试的可读性。请记住,在我的真实世界课程中,我有几个需要模拟的依赖项,这意味着这里的测试比我的真实世界测试所需的要短几行。

第一次测试

第二次测试

那么所有这些看起来都正确吗?或者有没有更好的方法来使用工厂模式?

0 投票
5 回答
1081 浏览

factory-pattern - 工厂是否只返回接口的实现?

工厂是否只返回接口的实现?那是工作吗?

0 投票
6 回答
1235 浏览

c# - C#:抽象策略基类作为策略对象的抽象工厂

我正在尝试为我的公司创建一个基于 Web 的工具,该工具本质上是使用地理输入来生成表格结果。目前,三个不同的业务领域使用我的工具并获得三种不同的输出。幸运的是,所有的输出都基于相同的主表 - 子表的想法,它们甚至共享一个共同的主表。

不幸的是,在每种情况下,子表的相关行都包含截然不同的数据。因为这是唯一的争论点,所以我将一个FetchChildData方法提取到一个名为DetailFinder. 结果,我的代码如下所示:

其中 PlanningFinder、OperationsFinder 和 MaintenanceFinder 都是 DetailFinder 的子类。

我刚刚被要求添加对另一个业务领域的支持,并且不愿意继续这种if块趋势。我更希望有一个如下所示的解析方法:

但是,我不知道如何DetailFinder知道哪些子类处理每个字符串,甚至不知道存在哪些子类,而不仅仅是将 if 块转移到Parse方法中。有没有办法让子类在 abstract 中注册自己DetailFinder

0 投票
1 回答
237 浏览

actionscript-3 - 存储工厂模式产品

现在,我有一个 switch 语句,用于基于字符串创建对象。有三种类型的对象扩展了抽象的通用对象。我真的应该使用工厂模式,我现在正在弄清楚。因此,我的问题是:我欣赏工厂模式的灵活性,但现在我将可能的产品存储在专用于其类型的特殊字典中。

如果我只有三种类型,那就行得通,但是如果我决定使用工厂模式的灵活性添加更多类型,那么就会出现如何存储它们的问题,因为每次添加一个时我都必须制作一个特殊的字典...

我能想到的唯一答案是嵌套我的字典,这听起来很慢。

这可能是一个可行的解决方案,但任何人都可以建议一个更清洁的解决方案吗?我在 AS3 工作,但随时提供更通用的解决方案。