デザインパターンを学び直す - Singletonパターン
私が経験した現場では、あまりデザインパターンを見ることも、
考えることも少ないのですが、Javaプログラマとしては必須の知識なので、
デザインパターンを学び直します。
まずは有名なGoFのデザインパターンから。
今回は簡単なSingletonパターンをみてみます。
Singletonパターンはインスタンスをただ一つしか作らせたくないときに用いられます。
まずは、通常のパターンです。
public class Normal{ private String name; public void setName(String name) { this.name = name; } public String getName() { return this.name; } public static void main(String[] args){ Normal instance = new Normal(); instance.setName("aaa"); System.out.println(instance.getName()); instance = new Normal(); System.out.println(instance.getName()); } }
Normalクラスのインスタンスを作成した後、aaaという名前をつけ、名前を取得し、標準出力します。 その後にまた別のインスタンスを作成して、そのまま標準出力します。
実行結果 aaa null
当然、1つ目の標準出力では、aaaという名前をつけられたインスタンスの名前を取得しているので、"aaa"と出力されます。また、2つ目の標準出力では、別のインスタンスを作成しているので、インスタンスの名前を取得しても、"null"と出力されます。
Singletonパターン
public class Singleton{ private String name; private static Singleton registerNote = new Singleton(); private Singleton(){} //デフォルトコンストラクタを潰す public static Singleton getInstance(){ //publicでインスタンスを返すメソッド return registerNote; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } public static void main(String[] args){ //Singleton instance = new Singleton(); //デフォルトコンストラクタは潰されているので、newできない Singleton instance = Singleton.getInstance(); instance.setName("aaa"); System.out.println(instance.getName()); instance = Singleton.getInstance(); System.out.println(instance.getName()); } }
実行結果 aaa aaa
先程と同じようにSingletonクラスのインスタンスを作成した後、
aaaという名前をつけ、名前を取得し、標準出力します。
実行結果としては、
当然、1つ目の標準出力では、aaaという名前をつけられたインスタンスの名前を取得しているので、"aaa"と出力されます。
また、2つ目の標準出力では、別のインスタンスは作成できず、インスタンスの名前を取得しても、1つ目と同じインスタンスの名前を参照することになるため"aaa"と出力されます。
これがSingletonパターンですが、使用例としては、 ロギングライブラリ(java.util.logging)やスレッドプール(java.util.concurrent.Executors)などがあります。
次回はStrategyパターンを見てみます。
- 作者: 結城浩
- 出版社/メーカー: SBクリエイティブ株式会社
- 発売日: 2014/02/14
- メディア: Kindle版
- この商品を含むブログ (2件) を見る