问题标签 [abstract-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 投票
1 回答
155 浏览

design-patterns - 为什么 AbstractFactoryUnit 具有动态而不是静态多态性?

我目前正在学习现代 c++ 并专注于抽象工厂,据我了解,Loki 的主要思想之一是避免 GoF 中使用的“虚拟”(动态多态)。但有时,它仍然被使用。在关于抽象工厂的一章中,AbstractFactoryUnit 具有“虚拟”。http://loki-lib.cvs.sourceforge.net/loki-lib/loki/include/loki/AbstractFactory.h?view=markup从我目前阅读的内容来看,有很多方法可以绕过它。http://en.wikipedia.org/wiki/Template_metaprogramming#Static_polymorphism

为什么在这种情况下使用 virtual 更有效?

0 投票
0 回答
215 浏览

boost - 哪些 boost 工具组合允许使用抽象工厂设计模式?

据我了解,boost::function、boost::factory 和 std::map 的组合允许创建对象工厂。http://www.boost.org/doc/libs/1_49_0/libs/functional/factory/doc/html/index.html Loki 有抽象工厂,但由于某种原因 boost 没有它。使用抽象工厂模式的提升方式是什么?

我能想到的一种方法是抽象一个用于手动创建产品的接口——通过创建具有相同创建策略的产品。

如果您的答案使用静态多态性,我会更高兴。

0 投票
1 回答
1186 浏览

java - 使用 xml 中的抽象工厂模式动态选择要创建的对象

我希望这不是太具体。

我创建了一个 XML Schema,我用 XJC 编译它来获取类。XML 基本上表示表单的一些元素(如文本字段、标签等)。这是一段摘录:

如您所见,对象的类型是从属性 xsi:type 定义的,因此当我使用 jaxb 解组 xml 时,它会自动建立正确的类。

现在的问题:我正在实现一个抽象工厂来创建对象,所以基本上我必须根据 xml 说我必须创建的对象来调用我工厂的不同方法。我现在使用的不太令人满意的方法是:

我想使用另一种方法(编辑:而不是开关/案例),我正在考虑枚举,但我并不完全在那里。我也不想使用反射。

0 投票
3 回答
336 浏览

dependency-injection - 使用依赖注入时在哪里放置所需的初始化代码?

当我的构造函数是纯参数到属性设置器时,我不确定将类需要正常工作的其他代码放在哪里。

例如,在 JavaScript 中,我正在编写一个WindowMessageController处理对象message事件的程序window

为了使它起作用,我必须在某处附加处理程序:

这些东西正确地属于哪里?

  1. 在构造函数中
  2. 在 .initialize() 方法中 - 引入时间耦合
  3. 在 WindowMessageControllerFactory.create(applicableWindow) 中——对于如此核心的代码来说,这是一个相当遥远的地方。这意味着即使是这么小的班级也会被分成两部分。
  4. 在组合根本身中 - 这会在一直做时增加它的大小
  5. 在其他一些类 WindowMessageRouter 中,只有一个方法,即构造函数,使用此代码

编辑

这种情况似乎很特殊,因为在应用程序中通常只有一个这样的控制器实例。然而,在更普遍的情况下,如果我正在创建一个Button将包裹一些 DOM<button />元素的类的实例,那么答案是什么?突然一个

似乎更有用。

0 投票
1 回答
1173 浏览

c# - 使用带有 StructureMap 的抽象工厂的可能性

现在我需要一个抽象工厂来创建 IExecuter,因为我需要将运行时值传递给构造函数。

可能性 #1 -使用静态抽象工厂

可能性 #2 -使用抽象工厂作为构造函数参数

可能性 #3 -使用 IExecuterFactory

如您所见,对于可能性#3,我不知道如何实现它。我可以再次Func在 的构造函数中使用ExecuterFactory,但这有点奇怪,因为我在抽象工厂中使用了抽象工厂

还有一种 #4 的可能性来注入容器,但这不是一个好主意,因为引入了服务定位器

我问自己是否有一种使用抽象工厂的方法Func<>

0 投票
2 回答
2575 浏览

c# - 实现抽象工厂模式的正确方法?

我即将以古老的 ado.net 方式构建数据访问层。传统上,我会根据简单的存储库模式构建 dal。但这次我想尝试一下抽象工厂模式,因为我最近在一篇文章中读到了这种模式。

所以在这里我尝试用抽象工厂模式编写一个dal。首先让我解释一下到目前为止我得到了什么。之后我想知道的是我的方法是否是实现这种模式的正确方法,以及存储库方法的优势是什么。

所以我写了以下类:

所以我的问题简而言之:1)这是抽象工厂模式的正确实现吗?2)什么可以做得更好?3)从基类继承的不同存储库类有什么优势?

谢谢很多人。

如果您需要有关我的代码的更多信息,请告诉我。但是现在没有更多了!

0 投票
1 回答
65563 浏览

design-patterns - 抽象工厂模式

  1. C# 中抽象工厂模式的好例子?
  2. C#中抽象工厂模式的优点是什么?
  3. 如何在抽象工厂模式中使用 C# 泛型?
  4. 如何使用抽象工厂模式进行单元测试?
0 投票
1 回答
1672 浏览

php - 用于 Code Igniter 模型的完整抽象工厂模式

我正在创建一个使用 MongoDB 作为数据库的网站,购买我还希望将来能够使用任何其他存储系统,所以我想使用抽象工厂模式的完整实现。通过完整的实现,我指的是:

  • “Database_factory”抽象类,客户端代码(控制器)应该使用它来创建工厂对象。
  • “Mongodb_factory”类,它扩展了 Database_factory 类。

  • 代表一组查询的“客户”抽象类。

  • 实现“客户”类的“Mongodb_customers”类。“Mongodb_customers”对象应该由“Mongodb_factory”返回。

我确切地知道如何使用纯 OO PHP 做到这一点。但我不知道如何将它与 CodeIgniter 提供的模型架构合并。

只使用“Customers”抽象类,然后使用“Mongodb_customers”来实现它很容易,但我也想使用工厂。

当你需要 CodeIgniter 中的模型时,你只需使用“$this->load->model('my_model');” 并使用它的功能,但是如何创建一个工厂对象,并使其返回您需要的具体模型,您可以通过接口(抽象类)使用它?

有没有机会实现这一目标?

感谢你们所有人。

0 投票
2 回答
14484 浏览

c++ - 如何创建类类型数组?

我有一个类“Base”,以及从 Base 派生的几十个类。我想有一种方法可以通过索引为我创建正确的类。像这样:

然后我可以做new array[i];

如何用 C++(0x) 实现这一点?通常我会使用抽象工厂模式。但是因为我有很多派生类,这真的会减慢程序的速度。

由于派生类只会使用一次,我还教过使用它:

但这会导致巨大的内存消耗,而不是计算不是每个类都会一直被使用。

有什么建议吗?

0 投票
0 回答
157 浏览

asp.net-mvc - 在域模型中动态分配域模型

这是我的第一个问题,在我试图解决这个问题的过程中,我已经为写什么而苦恼了几天。

我购买了 Mark Seeman 的 .NET 中的依赖注入一书,并一直在尝试遵循该书和 Ninject 网站上的示例来创建抽象工厂类。一般的想法是我有一个包含问题答案列表的表格。答案可以有多种类型,所以我使用工厂来创建相关的答案类型。

我收到错误:

我最初尝试使用一个参数,但为了简化这个例子,我把它全部去掉了。错误消息中给出的建议似乎都不适用,工厂类型是绑定的,表单服务也是如此,但 answervalue 显然不是。

这是我的 NinjectWebCommon.cs 中的代码

这是答案类定义:

和答案值:

和工厂:

我觉得我已经用尽了我的知识,我只是绕着圈子一遍又一遍地尝试同样的事情。一定有一些很简单的东西我错过了,但我就是看不到它是什么。