デザインパターンとは、システム設計におけるクラスやインターフェースの関係に名前をつけたものです。 GoFの23のパターンが有名です。 デザインパターンというのは、どんなパターンなのか、パターンの目的は何かということを覚えることが非常に重要なのですが、これを実際に適用しようとした場合に、いつ適用していいかが見えてこないとお話になりません。

そこで、自分の勉強も兼ねつつ、パターンの実践時における使用場所や、パターンを適用するきっかけを見つけられるようにメモしておきます。

今回は、インスタンスを一つしか作らせたくない、Singletonパターンです。

Singletonパターン

Singletonパターンは、クラスのインスタンスを一つしか作りたくない、作らせたくない場合に使われるパターンです。

例えば、アプリケーションの設定項目を保持するクラスやメッセージをつかさどるクラスのようなシステムに一つのインスタンスしか必要の無い場合に使います。Factory Methodパターンと一緒にも良く使われます。Factoryクラスはインスタンスを一つしか作る必要はないです。

クラスのインスタンスが一つしか生成されないことを保証する場合に使われます。メッセージをつかさどるクラスのインスタンスはシステムにたった一つだけしか生成してほしくは無いはずです。なぜなら、複数のインスタンスがいると、それぞれのインスタンスが異なるメッセージを保持する可能性が出てきてしまうからです。Singletonで実装しない場合もありえますが、ほとんどの場合、このようなときはSingletonパターンを使います。

Singletonパターンを適用するときに注意する点として、インスタンスが一つしかないので不用意に状態を変更しないように気をつけなければなりません。不用意に変更できるようにしてしまうと、思わぬところでバグが発生してしまう可能性があります。

パターンの適用タイミング

Singletonのインスタンスは、イメージ的にはstaticメソッドのみを持つUtil系のクラスに状態を持たせたものと考えることができます。ということは、Util系のクラスを作りたいのだが、状態も持たせたい場合に使えるパターンだと言えます。

もうひとつは、インスタンスを一つしか生成したくない、同じインスタンスであることを保証したい場合に使います。メッセージ管理クラスのような、システムに一つしか必要なくかつ、いつでも同じインスタンスの状態でいて欲しいクラスに、このパターンを適用します。

つまり、Util系のクラスに状態を持たせたい場合システムに一つだけ、常に同じ状態のインスタンスを保証したい場合に使えるパターンです。

実装サンプルと参考文献

Singletonパターンの実装方法をもっと詳しく知りたい場合は、下記のサイトにアクセスするのをお勧めします。もしくは、参考書籍を載せておきますので、そちらをお買い求めください。(^^;)

  • TECHSCORE(Singletonパターン) TECHSCORE

  • Singletonパターンについての解説 Singletonパターン

  • デザインパターンのお勧め書籍


  • 独習シリーズのデザインパターン編。デザインパターンを一人でも学べます。

  • Sun Microsystemのお墨付き。GoF以外のパターンも学べます。

  • UMLを使って、オブジェクト指向のいいとこ取りができます。

  • デザインパターンだけではなく、ソフトウェア設計の原則やプラクティスまで学びたい人におすすめ