Multitonのインスタンス数がコンパイル時に固定されている場合、Multiton パターンに enum を使用することをお勧めします。Enum Sigletonパターンを見たことがあるので、Multiton でも同様のことができるかどうか疑問に思っていました。
3 に答える
リンク先のパターンの説明にはキーの固定セットがないため、キーの固定セットがある場合、それをマルチトンと呼ぶことができるかどうかはわかりません。しかし、それを受け入れれば、はい、enum インスタンスはそれぞれシングルトンです。
列挙型はオブジェクトであることを思い出してください: 状態とメソッドを持つことができます。
C# では、私が「スマート列挙型」または「ヘビー列挙型」と呼ぶパターンをよく使用してきました。ここでは、(a) 値がオブジェクトである列挙型 (Java が許可するような)、または (b) として考えることができるものが必要です。可能なすべてのインスタンスがコンパイル時に定義されるクラス (これが私が実装する方法です)。たとえば、私は音楽モードの概念を次のようにモデル化しました。
パブリック クラス MusicalMode { public readonly 文字列名。 public readonly int 数値。// 参照メモの開始: 1=C、2=D など public readonly int[] インターバル; // 1 = 半音、2 = 全音 公開文字列 ToString () { /* 実装省略 */ } public static MusicalMode FromString (String s) { /* 実装省略 */ } // これらは存在できる唯一のインスタンスです 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 モード Locrian = new Mode(7, "Locrian"); プライベート モード (int num、文字列名) { /* 実装省略 */ } }
Multiton パターンについて初めて知ったとき、スマートで重い列挙型を考えて、「ああ、やった!」と思いました。しかし、キーのセットが固定されているかどうかについてのJB Nizetの発言に基づいて、今はわかりません(私の例のように)。
私の MusicalMode は Multiton の例ですか? そうでない場合、そのパターンに確立された名前はありますか?
GuiceやSpring Framework IoCなどの依存性注入ツールは、スコープ、状態、その他の興味深いものを管理できるため、この目的にはより好ましいと思います。