Enum Multiton Pattern

Является ли хорошей идеей использовать enum для шаблона Multiton, если количество экземпляров для Multiton фиксировано во время компиляции. Я видел шаблон Enum Sigleton, поэтому мне просто интересно, можно ли подобное сделать и для Multiton?

3 ответа

Описание паттерна, с которым вы связаны, не имеет фиксированного набора ключей, поэтому я не уверен, что вы могли бы назвать его Multiton, если у вас есть фиксированный набор ключей. Но если мы примем это, то да, каждый экземпляр enum является единичным.

Помните, что перечисления являются объектами: они могут иметь состояние и методы.

В C# я часто использовал шаблон, который я называю "умные перечисления" или "тяжелые перечисления", где я хочу что-то, что вы можете представить как (а) перечисление, значения которого являются объектами (как позволяет Java), или (б) класс, в котором все возможные экземпляры определены во время компиляции (как я это реализую). Например, я смоделировал концепцию музыкального режима следующим образом:

public class MusicalMode {public readonly String Name; public readonly int Number; // начальная ссылка: 1=C, 2=D и т. д.
    public readonly int[] Intervals;  // 1 = полшага, 2 = весь шаг общедоступная строка ToString () 
    { /* реализация опущена */ }  

    public static MusicalMode FromString (String s) 
    { /* реализация опущена */ }

    // это единственные экземпляры, которые могут когда-либо существует публичная статическая только для чтения Mode Ionian     = new Mode(1, "Ionian"); общедоступная статическая только для чтения 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 = новый режим (5, "Mixolydian");
    public static readonly Mode Aeolian    = new Mode(6, "Aeolian");
    public static readonly Mode Locrian    = new Mode(7, "Locrian"); приватный режим (int num, String name)
    { /* реализация опущена */ }
}

Когда я впервые узнал о паттерне Multiton, я подумал "О, я сделал это!", Думая о моих умных / тяжелых перечислениях. Но теперь я не уверен, основываясь на замечании Дж. Б. Низета о том, является ли набор ключей фиксированным (как в моем примере).

Является ли мой MusicalMode примером Multiton? Если нет, есть ли устоявшееся название для этого паттерна?

Я думаю, что инструменты Dependency Injection, такие как Guice или Spring Framework IoC, более предпочтительны для этой цели, поскольку вы можете управлять областью действия, состоянием и другими интересными вещами.

Другие вопросы по тегам