デザインパターン[GoF 23]#5 Singletonパターン

こんにちは!ぐちです。

〜ぼっちAdvent Calendar風イベント実施中[16日目]〜

今回ご紹介するデザインパターンはとても有名でよく使われているものです。変に説明するよりもコードを見られたらおわかりになるかと思います!ということで今回は下記の記事五つ目をご紹介したいと思います。

Singletonパターン

Singletonパターンとは、当該クラスのインスタンスはシステム上、常に1つ(もしくは数を制限)しかない状態を作るパターンです。言葉で書くと????となりそうな感じですが、コードを見れば一目瞭然です!

ずばっとコードをご紹介しますね。

public class SingletonObject {
     private static SingletonObject singletonObject = new SingletonObject();

     private SingletonObject() {}

     public static SingletonObject getInstance() {
          return singletonObject;
     }
}

シンプルですね!注意点は下記の通りです。

  • インスタンス用の変数はprivate定義としてクラス外から直接アクセスできないようにする
  • コンストラクタは必ず定義し、private宣言を行いデフォルトコンストラクタが働かないようにする
  • インスタンス取得用のメソッド(例ではgetInstanceメソッド)を定義する

GoFのSingletonパターン

GoF本で宣言されているSingletonパターンは元々下記のような形だったようです。

public class SingletonObject {
     private static SingletonObject singletonObject;

     private SingletonObject() {
          singletonObject = null;
     }

     public static SingletonObject getInstance() {
          if(singletonObject == null) {
               singletonObject = new SingletonObject();
          }
          return singletonObject;
     }
}

ただ、これだと、インスタンス取得時の条件文がスレッドセーフでないということで、現在は最初のコードになったそうです。

Singletonパターンは見慣れていますし、シンプルなので簡単ですね。

サンプルコード

GitHubにアップしていますのでご自由にお使いください。

では今回はこの辺で。

2016年振り返り

体験したことではないのですが、今年1年は自分で成長したなと思えることが多かった年だと思います。物事の考え方であったり会社での立場もあり、次世代層の育成やチームビルディングなど、本当に様々なことを考え実践し、失敗を繰り返してきた1年だったなと思います。また同僚から色々教えられることもたくさんありましたし、話し方、文章の書き方など基本的なことを見直す良いきっかけを作れた1年でもありました。 来年はこれらの経験をもとにさらに飛躍的に成長できるだろうなと感じています。

ぼっちAdvent Calendar風ルール

  • 1日1記事更新する
  • 記事内に1年間の出来事の振り返りを1つ明記する
  • 1日の期間は起きてから寝るまで(時刻ではない)

ぼっちAdvent Calendar風イベントとは?下記の記事をご覧ください。