デザインパターン(GoF)/Singleton
本記事ではデザインパターン「Singleton(読:シングルトン)」について勉強していきましょう!
【ゴール】
「Singletonって〇〇のことで、〇〇な時に利用するんだ!」といえるようになること!
さて、ポイントはこの2つ!
この2つのポイントについて解説していきます!
デザインパターンとは?
Java、C++、C#などのオブジェクト指向言語でよく使われる設計をパターン化したものをデザインパターンといいます。
本記事のタイトルにもある「GoF」というのは、このデザインパターンを作成した4人組のことで、彼らは全23パターンに分けています。
GoFの全23パターン
- Template Method
- Singleton
- Adapter
- Factory Method
- Facade
- Iterator
- Abstract Factory
- Bridge
- Builder
- Chain of Responsibility
- Command
- Composite
- Decorator
- Flyweight
- Interpreter
- Mediator
- Mement(Snapshot)
- Observer
- Prototype
- Proxy
- State
- Strategy
- Visitor
本日はこの中から、「Singleton」をご紹介します。
Singletonとは?
Singletonとは、「一枚札」を意味する英単語です。
Singletonパターンは、GoFが作成したデザインパターン23個のうちの1つで、
生成するインスタンスの数を1つに制限する設計パターンです。
このような場合にSingletonパターンを用いてインスタンスを生成します。
インスタンスの状態を保持したかったり、クラス間で共通のメソッド・プロパティにアクセスしたい場合に使われることが多いですね。
Singletonを使ってみる
まずは基本的なSingletonパターンのサンプルプログラムを見ていきましょう。
final class Singleton { //ポイント① private static Singleton instance = new Singleton(); //ポイント② private Singleton() {} //ポイント③ public static Singleton getInstance() { return instance; } }
ポイント①「同じ型のprivate なクラス変数」
クラス変数(static変数)にしているので、プログラム実行直後に初期化、つまり、インスタンスが生成されます。
staticなので、初期化(インスタンス生成)は1度しか行われません。
ポイント②「コンストラクタの可視性がprivate」
コンストラクタの修飾子がprivateになっています。こうすることで、外部からインスタンスを生成することが出来ません。
(他のクラスで、「Singleton instance = new Singleton();」と書けないということ!
コンストラクタはnewした時に実行されるメソッドなので!)