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

c# - 这是工厂方法创建模式吗?

我已经使用工厂方法创建模式有一段时间了。我最近才被告知:

不是我的“技术”负责人的工厂方法创建模式,没有告诉我原因或给我她的解释。我恳请解释,她告诉我她没有时间。我被告知只需重命名它。如果我错了,那么我无疑会接受我多年来一直错误地实施这一点。这是您将如何实现工厂方法创建模式的方式吗?提前致谢。

0 投票
3 回答
125 浏览

java - 如何在获取依赖的方法之间进行选择?

我已经看到了至少三种在 Java 对象中获取依赖项的方法,而无需将对象与依赖项的创建耦合;

依赖注入 - 一些框架基于外部配置将所需对象注入到另一个对象中,例如:Spring managed beans

依赖项查找 - 一个类在某种目录服务中查找所需的依赖项,例如:Java EE 容器中的 JNDI 查找

静态工厂 - 全局范围内的对象按需提供实例 - 标准 Java SE API 似乎到处都是这些,例如:java.util.Logger.getLogger(name)java.util.Calendar.getInstance()

对于哪种情况最适合您,您可以提供哪些指导?

0 投票
3 回答
4225 浏览

java - 在 Java 中缓存和重用不可变单例对象的最佳方法是什么?

我有一个表示一组值的类,这些值将用作地图中的键。

这个类是不可变的,我想使用静态工厂模式将它作为每组不同值的单例。目标是防止创建相同的对象多次(100 多次)并优化 equals 方法。

我正在寻找缓存和重用此类以前实例的最佳方法。首先想到的是一个简单的哈希图,但有其他选择吗?

0 投票
5 回答
2614 浏览

java - 将 Enum 或 String 用于静态工厂方法?

在工厂方法中使用enumString分派到正确的对象来创建更好吗?static

示例String

示例enum

目前,据我说:

使用的好处enum

  • 避免用户使用未经处理的carName.

使用的缺点Enum

增加依赖关系,因为更改为enum(例如FERRARI成为ENZO_FERRARI)将需要在客户端进行修改。但是,String我们可以重定向FerrariEnzo Ferrari实例而无需重新编译客户端代码。当然,我们可以为使用旧enum值的客户端做同样的事情FERRARIENZO-FERRARI enum但对我来说,这意味着enum必须保留旧值以使客户端兼容......对我来说没有意义。

我想知道你对这个问题有什么看法?

0 投票
3 回答
18457 浏览

design-patterns - 工厂模式 - CreateInstance 是否静态?

这是关于工厂模式的。我有点困惑。

我看到了createInstance()方法是静态的实现和一些非静态的实现。

有人说这取决于“风格”或“品味”,有人说不是。根据四人帮的说法,维基百科说它应该是非静态的, http: //www.dofactory.com/Patterns/PatternFactory.aspx也说它应该是非静态的。

我的问题是:它是否取决于风格和品味,或者如果它以静态方式实现,它是否违反了工厂模式?什么是对的?

0 投票
4 回答
15495 浏览

java - Spring 3 @Component 和静态工厂方法

如果我正在编写一个静态工厂方法来创建对象,我如何为该工厂类使用“@Component”注释并指示(带有一些注释)应该调用的静态工厂方法来创建该类的 bean?以下是我的意思的伪代码:

0 投票
2 回答
203 浏览

java - 静态工厂建设者的麻烦

需要创建未指定数量的对象,我尝试创建一个可以执行此操作的构建器。一切都很好,直到我意识到我的构建器创建的所有对象的属性都具有相同的值。

所以当我打电话给建设者时:

...我将有 2 个对象,它们的属性将具有构建器被要求创建的最后一个对象的值。

首先,工厂建设者是谨慎的做法吗?其次,我的建造者是否可以挽救?

生成器:

编辑/固定:

因此,对于它的价值,这里是修改后的构建器。它需要另一个可以正确初始化它应该构建的实例的构造函数。

0 投票
2 回答
376 浏览

java - Java 静态工厂转换

在我的客户端/服务器桌面应用程序上。我有这个问题,我应该如何使用我的模型正确编码我的 JDBC 类,以确保所有持久性请求都可以支持并发。i.e., multiple models want to request update to its persistence counterpart simultaneously [without atmost delay].

情节是这样的。遵循位于服务器应用程序中的类。

持久性包:

通讯类【客户端类】

主类【服务器类】

由于这是一个客户端/服务器应用程序,来自客户端的多个请求同时馈送到服务器。服务器处理请求,将适当的回复发送给适当的客户端。注意:客户端和服务器之间发送的所有对象都是 java.io.Serializable 的实例。

遇到这种情况并调查Server.ClientServer.update()我们可能会遇到性能问题,或者我应该说由于Intrinsic Locks. 但是由于我必须遵守规则concurrencysynchronization确保Server.T1Service不会对 N 个客户端请求的队列感到困惑。以下是问题:

  1. 根据Effective Java - Second Edition的第 1 项Static Factory,这是否可以让我创建一个新的类引用来引用 Persistence 包的类中的方法?
  2. 内部的每个Client元素List<Client>是否会形成一个并发问题,让 N 个客户端message同时更新其字段,从而触发ClientObsver.update()其中此观察者的引用对象只是父类中的单个实例。由于内存问题,我避免创建 T1Service 的多个实例。
  3. 如果我们要通过 Effective Java - Second Edition 的内容,我怎样才能将我的持久性类转换为易于阅读、易于实例化并支持并发的方式?
0 投票
1 回答
1862 浏览

java - 我可以配置 myBatis 以使用 Builder 模式创建类的实例吗?

我有一个(Java)类,其中包含许多实例字段(其中许多是可选的)。我希望所有字段(因此类)都是不可变的。所以,我想使用构建器模式来构建类的实例。

我可以配置 myBatis 以使用 Builder 模式创建类的实例吗?我知道我可以让 myBatis 返回一个地图并使用该地图在我的代码中构建实例。但是,我正在寻找一种配置此映射(或使用某种约定)的方法,类似于如何通过使用 Java Bean 和构造函数来创建实例。

编辑(包括一个例子)

这是一个例子:

然后,我有一个映射器:

最后,我有映射器界面:

我还希望能够通过 myBatis 使用静态工厂方法创建实例。例如:

具体来说,如何让 myBatis 调用 newInstance(String, String)?

0 投票
1 回答
1500 浏览

c# - 使用状态和工厂设计模式管理状态和验证规则

在我最近的项目中,我有一个Order类,它的属性将由不同的用户逐步完成,每个用户将部分完成的订单提交给下一个用户,所以我假设每个人每次Order都有一个Status,例如当一个Order创建时,其Status将是NewStatus,当为其指定 BOM(物料清单)时,其Status将是BOMAttachedStatus,当它计划生产时,其Status将是PlannedStatus,等等。 在此处输入图像描述

我还需要在每个步骤中应用一些验证规则Order,例如用户必须在创建Order( NewState) 时指定客户名称,或者用户必须在Order计划 ( PlannedStatus) 时设置 PlanningDate,...

所以,我决定使用状态设计模式来管理状态,并使用工厂设计模式来检查验证:

在此处输入图像描述

当我想保存我的currentOrder,我打电话StateFactory.CreateOrderStatus(currentOrder)来设置它Status

这种方法对我的情况是否正确?有没有更好的解决方案?