C# Programming

【C#】シングルトンパターンの使い道【デザインパターン】

2020年8月15日

Pocket

こんにちは、せのり@senoriblog)です!

今回はデザインパターンの1つ、シングルトンパターン(Singleton)を紹介します。

本記事は、以下のような方を対象にしています。

  • シングルトンパターン?何それって方

 

それでは行きしょう!!

 

シングルトンパターンとは?

クラスのインスタンスが1つしか生成されないことを保証(制限)するデザインパターンのこと。

例えば以下のソースコードの場合(独習C# 新版から参照)

ポイントはコンストラクタを private にしていること。

そのため、クラスの利用者(クライアント)は以下のように MySingleton クラスをインスタンス化することができません。
MySingleton mySingleton = new MySingleton();

どのように利用するかと言うと、公開プロパティInstanceを使用します。
MySingleton mySingleton = MySingleton.Instance;

MySingleton は2行目でを既にインスタンス化されているので、Instance経由でそのインスタンスを取得できます。

 

 

いつ使うの?

あるクラスのインスタンスを1つしか生成したくないときに使います。

例えばログクラス。

ログ出力する際、一時的にインスタンスに出力内容を保持すると思いますが、
複数のプログラムからインスタンス生成してログ出力すると、
出力内容をどこかでマージする必要が出てきます。
シングルトンでインスタンスの生成を制限しておけば、出力内容のマージは不要になります。

あとはクラス間でデータ共有したい場面ですね。
class A でシングルトンクラスのインスタンス生成⇒データ編集⇒class B で class A で編集したデータを使用とか。
クラスでインスタンスが1つしか生成できないので、初めに作成したインスタンスを別クラスと兼用することができます。

 

サンプルプログラム

例にあげたシングルトンのログクラスです。

コンストラクタは private、公開プロパティ(GetInstance)でインスタンスを返却しています。

ログクラスに関しては以下記事でまとめています!

参考
【C#】自作ログクラスを作成しよう!【log4netなし】

まとめ

今回はシングルトンパターンについてまとめました。
シングルトンパターンの使い道やメリットが伝わりましたでしょうか?

ログ出力のように1アプリケーション上で明確に1つだけに制限したい場合に有用です。
ただし、多用するとプログラムの結合度が高くなり単体テストがしづらくなるデメリットもあります。
使用する際はしっかり見極めましょう。

今回は以上です。それでは!!

-C#, Programming
-,

Copyright© SENORI BLOG , 2021 All Rights Reserved Powered by AFFINGER5.