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

c# - asp.net 中的提供者设计模式

我需要一些有关 DLL 架构/设计模式/OO 的帮助。

我一直在学习类工厂设计模式作为我当前挑战的解决方案,并且在这一点上可以使用一些反馈。

我有三个类,它们是 ASP.NET 2.0 的 ProfileProvider、MembershipProvider 和 RoleProvider 的自定义包装器。

我想实现一种对开发人员来说相当简单和直观的调用方式。大意是:

我读过的关于如何使用抽象类工厂来做到这一点的例子(如果,确实,这是要走的路)有些令人困惑(我一直在努力解决这个链接)。

关于如何开始的最佳实践有什么建议吗?或者,更好的是代码插图?:)

0 投票
3 回答
11003 浏览

design-patterns - 工厂、抽象工厂和工厂方法

我真的对这三个术语感到困惑。

我的理解是:

  • 在工厂模式中,没有具体的工厂。工厂根据参数构建新对象。

  • 在抽象工厂模式中,有多个具体工厂。客户必须明确地创建不同的具体工厂。

那正确吗?

其他的区别是什么?

此外,什么是工厂方法模式?和工厂模式一样吗?

0 投票
2 回答
2799 浏览

c# - 使用 Ninject IOC 替换工厂

我在解析器中有一个工厂方法。本质上,当我加载一个令牌时,我会查找该令牌的处理程序,或者直接转到默认处理程序。我已将其实现为 aswitch和 a ,Dictionary<string,Type>但两种方法都要求我将映射存储在处理程序类之外的其他位置。

我们正在为 IOC 使用 Ninject,所以我意识到我也可以使用

但这并不能节省我存储有关处理程序可以在 2 个位置处理的令牌的信息。有没有办法可以装饰处理程序,以便自动映射?

0 投票
5 回答
1353 浏览

java - 为什么有些类限制直接实例化?

我遇到了各种不允许直接创建它们的实例的类。相反,我们必须从其他类的静态方法或它自己的静态方法创建它们的实例。例如:

或者

这背后的原因是什么?

他们为什么不允许直接创建实例,如:

0 投票
5 回答
3187 浏览

php - 这是工厂模式的工作原理吗?

单例模式和注册表模式对我来说非常简单易懂,但工厂模式一直是我无法让我的大脑 100% 解释的东西。我想我现在可能明白了,我在下面写了一个示例代码,请检查并告诉我这是否是工厂模式的正确使用。示例在 PHP...

所以基本上创建了数据库、缓存和会话对象(此处未显示),然后将它们添加到工厂对象中,我可以在工厂类中为每个需要这 3 个依赖项中的任何一个的对象构建一个方法,我可以设置他们也得到哪些。这也使得单个类仍然可以在某种程度上具有可移植性,因为如果我想在没有工厂对象的情况下直接注入依赖项的话。这听起来对吗?如果这是正确的,这听起来真的很有用


更新#1

这是基于我在此处阅读的博客文章http://www.potstuck.com/2009/01/08/php-dependency-injection/他们将其称为“工厂”,我一直在使用注册表和很多人一直告诉我要研究一个“工厂”,而我读到的所有关于它的内容都没有在我的脑海中点击,直到我读到这篇文章但看起来它不是一个“工厂”?


更新 #2
来自维基百科 http://en.wikipedia.org/wiki/Factory_object 在面向对象的计算机编程中,工厂对象是用于创建其他对象的对象。它是构造函数的抽象,可用于实现各种分配方案,例如单例模式。工厂对象通常为它能够创建的每一种对象都有一个方法。这些方法可选地接受定义如何创建对象的参数,然后返回创建的对象。工厂对象用于获取特定类型的对象是一个比简单地创建新对象更复杂的过程的情况。工厂对象可能决定动态地创建对象的类(如果适用)、从对象池中返回它、对对象进行复杂的配置或其他事情。

所以也许这毕竟是一个“工厂对象”......

0 投票
2 回答
8826 浏览

wcf - WCF依赖注入和抽象工厂

我有这个 wcf 方法

和业务规则:

如果 profileType 是“A”,则从数据库中读取。

如果 profileType 为“B”,则从 xml 文件中读取。

问题是:如何使用依赖注入容器来实现它?

0 投票
2 回答
2622 浏览

oop - DDD Book,Eric Evans:“工厂应该抽象为所需的类型,而不是创建的具体类。”是什么意思?

在 Eric Evans 所著的《领域驱动设计》一书中,第 6 章的“工厂”部分(第 139 页)中说:

“任何好的工厂的两个基本要求是:

...

“2. FACTORY 应该抽象为所需的类型,而不是创建的具体类。”

您能否详细说明关于基本要求 2 的陈述的含义。

0 投票
0 回答
357 浏览

factory-pattern - 工厂模式 - 自动接线问题

我正在使用 subsonic2 生成的类并想添加一个抽象层进行测试,我创建了一个基本接口,因此......

太好了,我创建了一个“扩展”类文件夹,在其中放置了一个类并扩展了该类......

没问题,耶。然后它击中了我——有 239 个这样的类,我不打算去手工制作,软件必须有办法做到这一点,我很懒,所以我开始看将返回 IController<TCollection> 的工厂模式。我该怎么办?我想一个更好的问题是,我如何通过学习一个类并要求它使用某个接口来进行我的邪恶竞标?

0 投票
1 回答
271 浏览

php - 如何创建一个动态扩展类的工厂,使其类型发生变化但继承父方法?

我想做的是有一个静态工厂函数,你可以给它一系列属性,它返回一个对象,该对象是一个以前未声明的类,它扩展了一个已知的类。

基本上:

所以如果我写代码:

我得到:[编辑]

但我不知道从哪里开始寻找执行此操作所需的命令。我认为在我的工厂函数中,我需要以某种方式声明 $name 的值扩展了父类但不对其进行任何更改,然后构造一个新的 $name。这样它就具有父类的所有功能,只是类型不同。

0 投票
4 回答
2307 浏览

c++ - 创建模板对象时替代工厂模式 - C++

我想为一个 CG 项目实现一个 Mesh 类,但遇到了一些问题。我想要做的是一个 Mesh 类,它向用户隐藏实现细节(比如加载到特定的 API:OpenGL、DirectX、CUDA、...)。此外,由于 Mesh 类将用于研究项目,因此该 Mesh 类必须非常灵活。

出于灵活性考虑,每个 Mesh 实际上是通道的集合,如一个位置通道、一个普通通道等,它们描述了网格的某些方面。通道是 std::vector 的包装器,具有一些附加功能。

为了隐藏实现细节,每个 API(OpenGLMesh、DirectXMesh、CUDAMesh、...)都有一个派生类,用于处理特定于 API 的代码。通道(处理将通道数据加载到 API 的 OpenGLChannel 等)也是如此。Mesh 充当 Channel 对象的工厂。

但是问题来了:由于Channels是模板类,createChannel必须是模板方法,模板方法不能是虚的。我需要的是用于创建模板对象的工厂模式。有没有人对如何完成类似的事情有建议?

谢谢