如果Multiton的实例数在编译时是固定的,那么对于Multiton pattern使用枚举是一个好主意。我已经看到了Enum Sigleton pattern,所以我只是想知道类似的是否可以也为Multiton做了吗?
答案 0 :(得分:1)
您链接到的模式的描述没有固定的键集,所以如果您有一组固定的键,我不确定您可以将其称为Multiton。但是如果我们接受它,那么是,enum实例每个都是单例。
请记住,枚举是对象:它们可以有状态和方法。
答案 1 :(得分:1)
在C#中,我经常使用一种模式,我称之为“智能枚举”或“沉重的枚举”,我想要一些你能想到的东西:(a)一个值为对象的枚举(如Java允许),或者( b)一个类,其中所有可能的实例都是在编译时定义的(这是我实现它的方式)。例如,我已经模仿了音乐模式的概念:
public class MusicalMode { public readonly String Name; public readonly int Number; // starting reference note: 1=C, 2=D, etc. public readonly int[] Intervals; // 1 = half step, 2 = whole step public string ToString () { /* implementation omitted */ } public static MusicalMode FromString (String s) { /* implementation omitted */ } // these are the only instances that can ever exist public static readonly Mode Ionian = new Mode(1, "Ionian"); public static readonly Mode Dorian = new Mode(2, "Dorian"); public static readonly Mode Phrygian = new Mode(3, "Phrygian"); public static readonly Mode Lydian = new Mode(4, "Lydian"); public static readonly Mode Mixolydian = new Mode(5, "Mixolydian"); public static readonly Mode Aeolian = new Mode(6, "Aeolian"); public static readonly Mode Locrian = new Mode(7, "Locrian"); private Mode (int num, String name) { /* implementation omitted */ } }
当我第一次了解Multiton模式时,我想“哦,我已经做到了!”,想着我的智能/沉重的枚举。但现在我不确定,基于JB Nizet关于是否修复了这组键的说法(就像我的例子中那样)。
我的MusicalMode是Multiton的一个例子吗?如果没有,该模式是否有一个完善的名称?
答案 2 :(得分:0)
我认为像Guice或Spring Framework IoC这样的依赖注入工具现在更适用于此目的,因为您可以管理范围,状态和其他有趣的东西。