问题标签 [multiton]

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 投票
5 回答
3149 浏览

java - Java中的线程安全多线程

给定以下多吨:

如果没有昂贵的 getInstance() 方法同步和双重检查锁定的争议,我们如何保持线程安全和惰性?这里提到了单例的有效方法,但似乎并没有扩展到多例。

0 投票
1 回答
207 浏览

java - 枚举常量特定初始化

现在,我们都知道枚举是处理多实例的好方法(即,具有固定数量实例的类,在编译时已知),因为每个常量几乎都是您自己的枚举类的单例子类。但是,我遇到了如何进行枚举常量特定初始化的问题。

假设我们有以下枚举:

我想要做的是FooFactoryInputMethod.FOO. 为了做到这一点,我必须打电话给,说,FooFactory.newInstance()。但是,这可能会抛出异常,所以我不能简单地factory = FooFactory.newInstance()直接说。我不能把它放在枚举类型的构造函数中,因为InputMethod.BAR它没有以任何方式使用 FooFactory。由于静态初始化相对于枚举常量本身的初始化的顺序,使用静态初始化似乎不起作用。最后,我不能显式声明一个构造函数,因为它的子类InputMethodFOO一个恰好是匿名的实例。

那么,除了让自己接受惰性初始化之外,我将如何正确初始化FooFactory实例InputMethod.FOO

0 投票
1 回答
826 浏览

php - 使用 multiton 或任何设计模式的多个数据库连接

我有以下用于多个数据库连接的代码。这不是好的设计。一切都是静态的。但不知道如何改进。我可以添加更多功能,例如准备查询,但目前我想要好的/干净的设计。我试图制作多吨设计模式。要求就像,首先我将连接 1 个数据库,然后获取所有其他 mysql 客户端的数据库详细信息,然后循环连接每个数据库并做一些事情。所以,我需要多个连接。

0 投票
3 回答
2396 浏览

java - 线程安全的多线程模式

受到对给定答案的评论的启发,我尝试创建多线程模式的线程安全实现,它依赖于唯一的键并对它们执行锁定(我的想法来自JB Nizet对这个问题的回答)。

问题

我提供的实施是否可行?

我对 Multiton(或 Singleton)是否通常是好的模式不感兴趣,这会引起讨论。我只想要一个干净且有效的实现。

对比

  • 您必须知道在编译时要创建多少个实例。

优点

  • 没有锁定整个班级或整个地图。并发调用getInstance是可能的。
  • 通过 key 对象获取实例,而不仅仅是无界intor String,因此您可以确保在方法调用后获取非空实例。
  • 线程安全(至少这是我的印象)。


我试图防止调整地图大小和滥用我同步的枚举。在我完成之前,这更像是一个概念证明!:)

0 投票
2 回答
309 浏览

java - Multiton 模式使用的副作用

我需要您对我的 multiton 模式实现的建议、代码审查或改进。我想为 mongodb 服务器提供多连接支持。

多吨模式的最佳实践是什么?

0 投票
2 回答
5214 浏览

java - 单例模式:多例?

我对单例模式的多例实现如何工作感到困惑。我知道单例的定义如下:

确保一个类只允许创建一个对象,提供对它的单点访问。

但是,当使用单例模式的枚举版本时,多例不允许创建多个类的对象吗?

例如:

0 投票
2 回答
1729 浏览

java - 实例控制的类和多线程

Effective Java Chapter 2,Item 1 Bloch 建议考虑静态工厂方法而不是构造函数来初始化对象。他提到的好处之一是这种模式允许类从重复调用中返回相同的对象:

静态工厂方法从重复调用返回相同对象的能力允许类在任何时候保持对存在的实例的严格控制。执行此操作的类被称为实例控制的。编写实例控制类有几个原因。实例控制允许一个类保证它是单例(第 3 项)或不可实例化(第 4 项)。此外,它允许不可变类(第 15 条)保证不存在两个相等的实例:a.equals(b) 当且仅当 a==b 时。

这种模式在多线程环境中如何工作?例如,我有一个不可变的类,它应该是实例控制的,因为一次只能存在一个具有给定 ID 的实体:

如果我newInstance()从分离的线程调用会发生什么?我怎样才能使这个类线程安全?

0 投票
3 回答
213 浏览

c++ - 每个类数据的 C++ 习惯用法,无需虚拟 getter 方法即可访问

(这个问题与反射有关,但实际上与反射无关)

我有这个类的层次结构(比如class Aclass B : public A),除了特定于实例的数据之外,我还希望所有实例共享特定于类的数据。例如,假设我想为FunnyClassName我的每个类创建一个字符串。

我希望能够为我的每类数据使用非虚拟吸气剂,例如:

最重要的是,我希望在继承类中没有或尽可能少的样板代码。class Agetter 将在(类层次结构的根)中实现一次;B 类应该以其他方式指定它的 FunnyClassName。

有人建议(例如,间接地在 SO 上的问题中)使用类的类型哈希作为键的 Multiton 对象可能是合理解决方案的基础。是这样吗?是否有执行此操作的“标准”代码(例如在 STL 或 Boost 中)?还有另一种相关的方法吗?

备注

  • 认为这是不可能的吗?请参阅这个问题这个(简洁的)答案。但正如一些评论者和响应者所建议的那样,可能有必要使用非静态 getter,并进行更弱的约束,即不必为每个类重写 getter(即使用 RTTI)。
  • 如果 C++ 有静态虚拟数据成员,这将是微不足道的 - virtual static const std::string FunnyName。使用静态虚拟方法也是可能的,但前提是我们放弃对仅在基类中实现的 getter 的要求。我们会有类似/* static??*/ static const std::string& A::GetFunnyName() { return "Aye"; }and的东西/* static??*/ const std::string& B::GetFunnyName() { return "Bee"; }
  • 我对模板类的情况并不特别感兴趣,但如果你也想解决这个问题,那很好。
  • FunnyName() 只是一个例子。可能是const Thing& GetFunnyThing()。我不想要 typeid.name() 中的类名称,或者它的去修饰,等等。
  • C++11 没问题,但 C++03 中的解决方案会更好。请不要 C++14。
0 投票
1 回答
736 浏览

java - 最佳实践:具有延迟初始化的线程安全 Multiton 模式

想法是创建一个工厂类,它根据“类型”返回不同的单例实例。[多点模式]。此外,应该延迟创建单例实例。

下面的代码线程安全吗?使用 ConcurrentHashMap 使它更简单,但我想尝试使用 HashMap。

0 投票
2 回答
296 浏览

c# - 如何使用字典创建具有唯一值的列表(多点模式)

我需要制作这个仅包含唯一值的杂志列表,并使用字典和多吨模式来完成。
列表不能有两个名称和价格都相同的对象。
我在 c# 中只找到了一个 multiton 模式的例子,它并没有解决我的问题。

这是我已经拥有的代码的简化版本,但这些是该问题中最重要的事情。