第6章


Singletonパターン()

「Singleton」とは?

「このクラスのインスタンスはたった1つしか作らないし、作りたくない」場合がある。
それはシステムの中に1個しか存在しないものをプログラムで表現したいとき。
例えば、コンピュータそのものを表現したクラスや、現在のシステムを表現したクラス。
この場合、

指定したクラスのインスタンスが絶対に存在しないことを保証したい。

インスタンスが1個しか存在しないことをプログラム上で表現したい。

ということを表現するためのパターン、Singletonパターンを使用する。

Singletonの具体例 (サンプルプログラム)


Singletonクラス

<?php

class Singleton {

   private $singleton;

   private function __construct() {
       echo "インスタンスを生成しました。<br />";
   }

   public static function getInstance() {
       $singleton = new Singleton();
       return $singleton;
   }
}

?>

Singletonクラスのコンストラクタはpraivateになっている。
これはSingletonクラス外からコンストラクタを呼び出そうとしてもエラーにするため。

Mainクラス

<?php

 require_once("Singleton.class.php");

class Main {

    public function main() {

         echo "Start.<br />";

         $obj1 = Singleton::getInstance();
         $obj2 = Singleton::getInstance();

         if ($obj1 === $obj2) {
             echo "obj1 と obj2 は同じインスタンスです。<br />";
         } else {
             echo "obj1 と obj2 は同じインスタンスではありません。<br />";
         }

         echo "End.<br />";
     }
 }

new Main();

?>

Singletonパターンにでてくるもの

Singleton

唯一のインスタンスを得るためのstaticメソッドをもっており、 いつも同じインスタンスを返す。

Singletonパターンの利点


インスタンスを制限する

インスタンスが複数存在すると、
互いに影響しあって思いがけないバグを生み出す可能性がある。

しかしインスタンスが1つしかないという保証があれば、
その心配をせず安心してプログラミングが出来る。

唯一のインスタンスの生成タイミング

最初にgetInstanceメソッドが呼び出されたときに、
staticフィールドの初期化が行われ、唯一のインスタンスが作られる。

関連しているパターン

以下のパターンは、インスタンスが1つである場合が多い。

* Abstract Factoryパターン
* Builderパターン
* Faceパターン
* Prototypeパターン

参考資料

  • Java言語で学ぶデザインパターン入門

最新の20件

2014-07-10 2014-06-07 2010-12-08 2010-11-12 2010-11-01 2010-10-25 2010-10-15 2010-08-18 2010-08-02 2010-07-20

今日の6件

  • counter: 235
  • today: 1
  • yesterday: 0
  • online: 1