В C # я часто использовал шаблон, который я называю «умные перечисления» или «тяжелые перечисления», где я хочу что-то, что вы можете представить как (а) перечисление, значения которого являются объектами (как позволяет Java) или ( б) класс, в котором все возможные экземпляры определены во время компиляции (именно так я его реализую). Например, я смоделировал концепцию музыкального режима следующим образом:
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, я подумал: «О, я сделал это!», Думая о своем умном / тяжелом перечислении. Но теперь я не уверен, основываясь на замечании Дж. Б. Низета о том, является ли набор ключей фиксированным (как в моем примере).
Является ли мой MusicalMode примером Multiton? Если нет, то есть ли устоявшееся имя для этого паттерна?