Enum Multiton模式

时间:2011-02-26 10:48:52

标签: java enums multiton

如果Multiton的实例数在编译时是固定的,那么对于Multiton pattern使用枚举是一个好主意。我已经看到了Enum Sigleton pattern,所以我只是想知道类似的是否可以也为Multiton做了吗?

3 个答案:

答案 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)

我认为像GuiceSpring Framework IoC这样的依赖注入工具现在更适用于此目的,因为您可以管理范围,状态和其他有趣的东西。

相关问题