问题标签 [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.
c# - 这是工厂方法创建模式吗?
我已经使用工厂方法创建模式有一段时间了。我最近才被告知:
不是我的“技术”负责人的工厂方法创建模式,没有告诉我原因或给我她的解释。我恳请解释,她告诉我她没有时间。我被告知只需重命名它。如果我错了,那么我无疑会接受我多年来一直错误地实施这一点。这是您将如何实现工厂方法创建模式的方式吗?提前致谢。
java - 如何在获取依赖的方法之间进行选择?
我已经看到了至少三种在 Java 对象中获取依赖项的方法,而无需将对象与依赖项的创建耦合;
依赖注入 - 一些框架基于外部配置将所需对象注入到另一个对象中,例如:Spring managed beans
依赖项查找 - 一个类在某种目录服务中查找所需的依赖项,例如:Java EE 容器中的 JNDI 查找
静态工厂 - 全局范围内的对象按需提供实例 - 标准 Java SE API 似乎到处都是这些,例如:java.util.Logger.getLogger(name),java.util.Calendar.getInstance()
对于哪种情况最适合您,您可以提供哪些指导?
java - 在 Java 中缓存和重用不可变单例对象的最佳方法是什么?
我有一个表示一组值的类,这些值将用作地图中的键。
这个类是不可变的,我想使用静态工厂模式将它作为每组不同值的单例。目标是防止创建相同的对象多次(100 多次)并优化 equals 方法。
我正在寻找缓存和重用此类以前实例的最佳方法。首先想到的是一个简单的哈希图,但有其他选择吗?
java - 将 Enum 或 String 用于静态工厂方法?
在工厂方法中使用enum
或String
分派到正确的对象来创建更好吗?static
示例String
:
示例enum
:
目前,据我说:
使用的好处enum
:
- 避免用户使用未经处理的
carName
.
使用的缺点Enum
:
增加依赖关系,因为更改为enum
(例如FERRARI
成为ENZO_FERRARI
)将需要在客户端进行修改。但是,String
我们可以重定向Ferrari
到Enzo Ferrari
实例而无需重新编译客户端代码。当然,我们可以为使用旧enum
值的客户端做同样的事情FERRARI
,ENZO-FERRARI
enum
但对我来说,这意味着enum
必须保留旧值以使客户端兼容......对我来说没有意义。
我想知道你对这个问题有什么看法?
design-patterns - 工厂模式 - CreateInstance 是否静态?
这是关于工厂模式的。我有点困惑。
我看到了createInstance()
方法是静态的实现和一些非静态的实现。
有人说这取决于“风格”或“品味”,有人说不是。根据四人帮的说法,维基百科说它应该是非静态的, http: //www.dofactory.com/Patterns/PatternFactory.aspx也说它应该是非静态的。
我的问题是:它是否取决于风格和品味,或者如果它以静态方式实现,它是否违反了工厂模式?什么是对的?
java - Spring 3 @Component 和静态工厂方法
如果我正在编写一个静态工厂方法来创建对象,我如何为该工厂类使用“@Component”注释并指示(带有一些注释)应该调用的静态工厂方法来创建该类的 bean?以下是我的意思的伪代码:
java - 静态工厂建设者的麻烦
需要创建未指定数量的对象,我尝试创建一个可以执行此操作的构建器。一切都很好,直到我意识到我的构建器创建的所有对象的属性都具有相同的值。
所以当我打电话给建设者时:
...我将有 2 个对象,它们的属性将具有构建器被要求创建的最后一个对象的值。
首先,工厂建设者是谨慎的做法吗?其次,我的建造者是否可以挽救?
生成器:
编辑/固定:
因此,对于它的价值,这里是修改后的构建器。它需要另一个可以正确初始化它应该构建的实例的构造函数。
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
. 但是由于我必须遵守规则concurrency
并synchronization
确保Server.T1Service
不会对 N 个客户端请求的队列感到困惑。以下是问题:
- 根据Effective Java - Second Edition的第 1 项
Static Factory
,这是否可以让我创建一个新的类引用来引用 Persistence 包的类中的方法? - 内部的每个
Client
元素List<Client>
是否会形成一个并发问题,让 N 个客户端message
同时更新其字段,从而触发ClientObsver.update()
其中此观察者的引用对象只是父类中的单个实例。由于内存问题,我避免创建 T1Service 的多个实例。 - 如果我们要通过 Effective Java - Second Edition 的内容,我怎样才能将我的持久性类转换为易于阅读、易于实例化并支持并发的方式?
java - 我可以配置 myBatis 以使用 Builder 模式创建类的实例吗?
我有一个(Java)类,其中包含许多实例字段(其中许多是可选的)。我希望所有字段(因此类)都是不可变的。所以,我想使用构建器模式来构建类的实例。
我可以配置 myBatis 以使用 Builder 模式创建类的实例吗?我知道我可以让 myBatis 返回一个地图并使用该地图在我的代码中构建实例。但是,我正在寻找一种配置此映射(或使用某种约定)的方法,类似于如何通过使用 Java Bean 和构造函数来创建实例。
编辑(包括一个例子)
这是一个例子:
然后,我有一个映射器:
最后,我有映射器界面:
我还希望能够通过 myBatis 使用静态工厂方法创建实例。例如:
具体来说,如何让 myBatis 调用 newInstance(String, String)?
c# - 使用状态和工厂设计模式管理状态和验证规则
在我最近的项目中,我有一个Order
类,它的属性将由不同的用户逐步完成,每个用户将部分完成的订单提交给下一个用户,所以我假设每个人每次Order
都有一个Status
,例如当一个Order
创建时,其Status
将是NewStatus
,当为其指定 BOM(物料清单)时,其Status
将是BOMAttachedStatus
,当它计划生产时,其Status
将是PlannedStatus
,等等。
我还需要在每个步骤中应用一些验证规则Order
,例如用户必须在创建Order
( NewState
) 时指定客户名称,或者用户必须在Order
计划 ( PlannedStatus
) 时设置 PlanningDate,...
所以,我决定使用状态设计模式来管理状态,并使用工厂设计模式来检查验证:
当我想保存我的currentOrder
,我打电话StateFactory.CreateOrderStatus(currentOrder)
来设置它Status
:
这种方法对我的情况是否正确?有没有更好的解决方案?