1

Multitonのインスタンス数がコンパイル時に固定されている場合、Multiton パターンに enum を使用することをお勧めします。Enum Sigletonパターンを見たことがあるので、Multiton でも同様のことができるかどうか疑問に思っていました。

4

3 に答える 3

3

リンク先のパターンの説明にはキーの固定セットがないため、キーの固定セットがある場合、それをマルチトンと呼ぶことができるかどうかはわかりません。しかし、それを受け入れれば、はい、enum インスタンスはそれぞれシングルトンです。

列挙型はオブジェクトであることを思い出してください: 状態とメソッドを持つことができます。

于 2011-02-26T10:59:12.870 に答える
2

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 の例ですか? そうでない場合、そのパターンに確立された名前はありますか?

于 2011-02-26T17:42:29.557 に答える
0

GuiceSpring Framework IoCなどの依存性注入ツールは、スコープ、状態、その他の興味深いものを管理できるため、この目的にはより好ましいと思います。

于 2011-02-26T12:06:08.553 に答える