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

java - 工厂方法,为什么我们使用静态调用从工厂获取对象

据我的理解,在使用工厂方法时,我们通过调用工厂的静态方法来获取对象.. 就像Foo f = Factory.getObj() .. 该方法被设为静态,因为我们不需要在调用getObj方法之前创建对象,这实际上会返回我想要的具体对象。Factory但是为什么使用 req getObj 方法创建类的实例new Factory()然后调用它是不常见的呢?对不起,如果这听起来很愚蠢,但为什么将工厂方法设为静态是很常见的?

静态工厂和工厂也是两个不同的东西吗?

0 投票
5 回答
2135 浏览

java - 静态工厂相对于构造函数的劣势

我正在经历有效的Java。第一项为静态工厂方法优于构造函数提供了一个令人信服的案例。

我没有得到第一个缺点是

仅提供静态工厂方法的主要缺点是不能对没有公共或受保护构造函数的类进行子类化。

为什么我需要对具有静态工厂方法的类进行子类化,因为静态方法不能被继承?

有人可以解释一下。

0 投票
5 回答
18454 浏览

java - 接口类java中的静态工厂方法

我正在阅读有效的 Java教科书。第一项是关于使用静态工厂方法而不是公共构造函数。我的疑问是,如果我指定一个我Interface如何指定一个静态工厂方法Interface?因为java里面不支持静态方法interface。教科书详细说明了如何创建一个包含公共静态工厂方法的不可实例化类。但是这些方法如何访问实现类的私有构造函数呢?

教科书说,如果您要定义一个Interface Type,请创建一个不可实例化的类Types并在该类中包含静态工厂方法。但是类中定义的方法如何Types访问具体实现的私有构造函数Interface Type

编辑:- 下面的句子是从教科书中引用的。请解释一下它的含义

“接口不能有静态方法,因此按照惯例,名为Type的接口的静态工厂方法放在名为Types的不可实例化类(第 4 项)中”

编辑:- 取自Joshua Bloch 的 Effective Java:Item1 - Static Factory Method

我的问题是,静态方法如何createFoo()调用私有构造函数MyFoo

0 投票
3 回答
13993 浏览

c# - 静态工厂方法与公共构造函数

背景:

这是我目前正在处理的代码。首先是基类,它是一个帐户类,它保存有关帐户的信息,并具有一些在大多数情况下更改类属性值的方法。

然后,我有另一个类用于创建帐户时,我将其命名为 ActiveAccount。这包含了我想对帐户使用的操作的大部分逻辑,这些操作只有在创建帐户后才能执行。有些课程不需要包括在内来解释问题;用你的想象力来假设这些类可能会做什么:

我使用静态工厂方法有两个原因。1) 我想要一个对象的可定制和可扩展构造(例如,将来我可能有一个 AccountTemplate,我可以从中提供通用信息来创建帐户;我可以轻松地使用 AccountTemplate 参数创建另一个静态工厂方法重载),以及 2 ) 具有无参数构造函数使我可以更轻松地将此对象序列化为 XML/JSON。

问题:

但是,我注意到我可以很容易地拥有一个接受 Account 参数的公共构造函数,执行逻辑并且可以很容易地通过重载进行扩展。我可以保留我的私有无参数构造函数以防止无参数构造并允许序列化。

我对编程很陌生。我想知道是否有特定原因使用静态工厂方法而不是公共构造函数,如上所述。做我想做的事情的首选方式是什么?

0 投票
1 回答
122 浏览

asp.net-mvc - Static factory method does not return object instance in MVC Controller

We are migrating from .aspx web application to MVC app.

Below is the problem while migrating:

I have a third party dll which contains static factory method to return instance by given Interface name.

Controller code:

Here, ObjectFactory is from third party dll with definition as below (no more code details are available on GetInstance method).

GetInstance method works perfectly in .aspx application - objBus is created successfully. But the same line (Controller code) when executed in MVC controller returns objBus as null.

Please suggest what could be the problem. I guess it may be due to difference in architecture and/or page life cyle of .aspx and mvc apps. Any suggestions on the problem are greatly appreciated.

0 投票
1 回答
2088 浏览

java - 在 Java 中创建和管理可由不同用户访问的唯一类实例

我有一个编程问题,我想知道它是否可以使用 Java 设计技术来解决。我有班级服务,我有班级客户。客户端请求一个服务,如果它不存在,那么它将被创建(即新的服务对象)。如果服务已创建(即由不同的客户端甚至相同的客户端),则服务类将不会创建新对象。相反,可以将客户端添加到服务中(如果尚未添加)。Service 类的其他字段和方法将应用于同一服务的客户端。

上述方法的问题在于,具有相同服务的新服务对象将由不同的客户端创建。

我目前正在阅读静态工厂。就我的研究而言:

上面的代码将阻止创建新的对象实例。但是,如果服务已经存在并因此返回 null,则新客户端无法加入(或使用)该特定服务。

0 投票
1 回答
72 浏览

c# - 做TDD的时候应该测试静态工厂吗?

我知道在 TDD 中,您应该避免编写未经事先测试的代码,但我想知道这是否是为了简单起见可能违反规则的时候之一(避免测试第三方库的包装器)测试目的,例如网关模式)。不过,我目前正在测试它们,如下所示:

0 投票
0 回答
415 浏览

c# - WCF 服务依赖注入和静态工厂

我有一个服务,每次GetNext()调用方法时都需要返回一个代码。为此,我有几个实现接口的代码提供程序。在 ServiceHost 打开和关闭之间应使用相同的代码提供程序,对于每个服务调用也是如此。我想避免在每次调用时创建一个代码提供程序实例。

我已经看过几篇文章,特别是 WCF 服务的依赖注入(主要是 Mark Seemann 的答案),其中使用 IInstanceProvider 和 ServiceHostFactory 的解决方案允许在服务构建期间传递参数。也许我没有完全理解那里发生的事情,因为我对 WCF 没有扩展知识。我最终实现了一个静态工厂并在服务实现中使用它,如下所示:

如果需要,我可以通过将所需的代码类型传递给工厂,从配置数据库或文件中获取它来扩展它,但这不是重点。这是拥有一个代码提供者的单一实例的最佳方式吗?如果不是,那么正确的(即更优雅、更高效和可维护)的解决方案是什么?拥有一个代码提供者实例的担忧也合法吗?

0 投票
0 回答
90 浏览

java - 静态工厂和工厂设计模式

static工厂和工厂设计模式是否相同?

听说Spring框架中用到了静态工厂的概念。

当我查找“静态工厂设计模式”时,谷歌结果显示更多关于工厂方法设计模式的信息。如果它们不相同,那么静态工厂设计模式是否仅用于依赖注入?

0 投票
2 回答
516 浏览

java - Effective Java Item1 - 对象创建的静态工厂方法

我正在阅读 Effective java item 1,其中讨论了用于创建对象的“静态工厂方法与构造函数”。提到的缺点之一如下:

“只提供静态工厂方法的主要缺点是没有公共或受保护构造函数的类不能被子类化。”

还提到这很好,因为它会将对象组合提升为继承。但是,当您确实想要继承时,这不是一个严重的限制吗?当我以前不知道类是否要扩展时,为什么我更喜欢静态工厂方法来创建对象?