バナナラボ

Vtuber美作ワニのブログです

【C#】シングルトンの実装とメリットとデメリットの話

バナナラボのワニです。

今日はデザインパターンのひとつ、シングルトンの実装について実装例を交えてメリット・デメリットについてお話します。

シングルトンとは?

Wikipediaに詳しく書いてくれてるので知らない人は先に読んでください。

ja.wikipedia.org

実装例

C# で説明します。

public class God
{
    private static God instance;
    public static God Instance {
        get {
            if (instance == null) instance = new God();
            return instance;
        }
    }

    private God(){ }
}

上記のようにひとつのインスタンスを複数の箇所で同一のインスタンスのものを使っていることを保証するのとどこからでもアクセスできるという点が見どころの仕組みになります。

メリット

上記のようにインスタンスそのものを同一のものであることを保証できる仕組みのため、汎用性と利便性はかなり高いです。 また様々な要素をプールすることで再利用性をも高めることができるため、困った実装に何かしらの助け舟を出しやすいという点でも評価できます。

主に設定型の機能では設定をひとつに保証してほしいシチュエーションが多いため、利用する機会が出やすいのではと思います。

デメリット

1つであることを保証する仕組みはある意味で多様性を奪うことになります。 また、シングルトンであってほしいシチュエーションは深い設計をしていくにつれて邪魔になっていくケースの方が増えていきます。

また汎用性の高さと利便性の高さはそれすなわち便利なものの多用に繋がり、シングルトンクラスそのものが神クラスとなり、なんでもできる機能になってしまう恐れもあります。 神オブジェクトという名称でWikipediaにも掲載されています。 ja.wikipedia.org

シングルトンはよく便利なものだと言われていますがその実態はFEのお助けパラディンの如く、序盤では猛威を奮ってくれますが練度が上がっていくにつれて使わなかったり、足を引っ張ったりすることもあります。

シングルトンは使わないほうがいいのか?

わざわざそんな選択肢を狭める必要はなく、またシングルトンそのものが完成された設計というわけではないので個人で使いやすくカスタマイズすることもひとつの手ではと思います。 設計のやり方は自由であり、便利かつ問題にならない設計を日々エンジニアは考えていくものなので試していって学べばいいのではと思っています。

宣伝

YouTubeでゲーム実況・ゲーム開発の動画投稿および配信をやっています! もしご興味があればチャンネル登録・高評価よろしくおねがいします!

www.youtube.com