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

python - 对象的工厂方法 - 最佳实践?

这是一个关于使用 python 从相同数据的不同形式创建类或类型的实例的最佳实践的问题。使用类方法更好还是完全使用单独的函数更好?假设我有一个用于描述文档大小的类。(注意:这只是一个示例。我想知道创建类实例的最佳方式,而不是描述文档大小的最佳方式。)

我的__init__方法采用以位表示的大小值(位且只有位,我想保持这种方式),但可以说我有一个以字节为单位的大小值,我想创建我的类的一个实例。使用类方法更好还是完全使用单独的函数更好?

或者

这似乎不是一个问题,也许这两个例子都是有效的,但我每次需要实现这样的东西时都会考虑它。很长一段时间以来,我都偏爱类方法方法,因为我喜欢将类和工厂方法捆绑在一起的组织优势。此外,使用类方法保留了创建任何子类的实例的能力,因此它更加面向对象。另一方面,一位朋友曾经说过“当有疑问时,做标准库所做的事情”,我还没有在标准库中找到这样的例子。

0 投票
1 回答
242 浏览

abstract-factory - 抽象工厂模式和工厂方法的区别,被一个案例搞糊涂了

“工厂方法”和“抽象工厂”的主要区别在于工厂方法是单一方法,而抽象工厂是一个对象。但是,有时我不能说它是什么,例如

你能告诉我这是工厂方法还是抽象工厂?谢谢!

0 投票
2 回答
1842 浏览

java - 多工厂方法与单一方法

对所有实例使用单个工厂方法和通用构造函数,然后填充实例会更好吗?还是应该使用多个工厂方法和构造函数?每种方法的优点是什么?

例如(选项 #1):

在这里,Plane 和 Car 将有一个简单的通用构造函数,但需要多个 setter 和 getter。调用者必须填充实例。

或者(选项#2):

在这里,我们不需要 getter 和 setter,但需要为每个实例使用不同的构造函数。

0 投票
3 回答
1064 浏览

c# - 使用属性作为工厂方法

我有一个基类Base,它需要创建另一种类型的实例TRequired,但是,只有派生类Base知道如何构造它们。

使用抽象属性作为工厂方法是不好的风格吗?例如

我应该出于某种原因使用一种方法吗?是否有指南为什么我应该/不应该在这里使用属性?

0 投票
1 回答
1249 浏览

android - 在android示例中,为什么 ScreenSlidePageFragment 类使用工厂方法来创建对象

我不知道他们为什么使用工厂方法来创建 ScreenSlidePageFragment 的实例。在构造函数中传递 pageNumber 并将其分配给 mPageNumber 有什么问题,当然还要摆脱这个工厂方法和 ARG_PAGE?!这是代码:

}

0 投票
6 回答
7923 浏览

java - 如果在引用类之前不调用静态初始化程序,如何注册java类

我有一个由执行文件处理的类实现的接口,比如搜索或其他。

然后我对每种文件类型都有不同的实现:

因此,我有处理器的 Utilizer,它有一个允许注册每个类的方法,如下所示:

到目前为止一切正常。

现在,我提供了我的接口的许多实现。

而且我很想为每个实现类提供一个静态初始化程序,该初始化程序在 Utilizer 中注册自身,在我之前的 TxtProcessor 的情况下,它将是:

问题是这个静态方法永远不会被调用,因为在应用程序的“静态可达”代码中没有对我的 TxtProcessor 类的引用,因为它是通过反射实例化的。所以jvm不调用静态初始化器。

假设我有两个部分:作为 Utilizer 的“通用代码”,另一方面是实现;它必须被认为是动态提供的东西,因此 Utilizer 部分不知道它。
事实上,这个想法正是每个类都会注册自己,而不会触及 Utilizer。
我很难想出一个不将某种形式的实现“知识”放在 Utilizer 端(并且保持简单)的解决方案,只是因为未调用静态初始化程序的问题。如何克服这一点?

0 投票
2 回答
7498 浏览

design-patterns - 工厂方法的命名约定是什么?

介绍

MacApp Macintosh 应用程序框架 [App89] 总是将定义工厂方法的抽象操作声明为 Class* DoMakeClass(),其中 Class 是 Product 类。

这句话让我想到了关于工厂方法设计模式的命名约定的问题。

期望

我希望看到提供清晰的工厂方法命名的最佳实践或有用的示例。

由于它可能依赖于一种语言,让我们考虑一组最流行的语言:C#、Java、C++ 和 JavaScript。

语境

对于上下文,我建议考虑以下类结构。我们有两个抽象类:Document 和 Application。该应用程序包含一个文档列表,应该可以创建一个新文档。Application 有一个工厂方法CreateDocument()

在此处输入图像描述

谢谢

0 投票
2 回答
911 浏览

c# - Unable to reduce cyclomatic complexity in a Factory method without using reflection

In my factory method I use Switch statement to create concrete objects. This results in very high cyclomatic complexity. Here is a sample code:

How can I refactor this to reduce cyclomatic complexity? If I use reflection to create objects or something else to build objects is it better than above method?

0 投票
0 回答
195 浏览

java - 通过实例工厂方法创建多态 Bean

当我通过实例工厂方法创建 bean 时,我可以在 xml 中指定“工厂方法”的参数吗?例如,在下面的代码片段中,我可以指定我的工厂方法 createAdapter() 采用一个参数来确定实例化 bean 的确切类型。

createAdapter() -->

我在这里有几个问题:

1) myFactoryBean 可以是抽象类吗?同时,它有一个 createAdapter 方法,该方法根据不同的输入参数返回不同的 bean?

2)工厂方法createAdapter的输入,我只能在运行时知道,不知道什么时候尝试在sprint配置中指定。

基本上,我有以下代码库,我想将其转换为 spring bean,但我不知道如何:

0 投票
2 回答
1973 浏览

java - Mockito/PowerMockito 模拟私有工厂方法

我想使用以下链接中建议的模式 1: https ://code.google.com/p/mockito/wiki/MockingObjectCreation 并具有以下类:

我正在尝试进行如下测试:

问题是我的工厂方法 makeFoo 是一个私有方法,所以我无法访问它。我不想公开它只是为了测试。我的测试类也与我的生产代码不在同一个包中,因此仅对包可见是行不通的。

更新:现在我发现了另一个问题。假设 makeFoo() 是公共的,'mockFoo' 也不会被返回,但真正的 makeFoo() 方法会被调用。这是因为 makeFoo() 的调用(在 MyClass 的构造函数中)在创建 mockFoo 之前。

有谁知道如何解决这个问题,或者我做错了什么?

提前谢谢你们的帮助!!