「このクラスのインスタンスはたった1つしか作らないし、作りたくない」場合がある。
それはシステムの中に1個しか存在しないものをプログラムで表現したいとき。
例えば、コンピュータそのものを表現したクラスや、現在のシステムを表現したクラス。
この場合、
ということを表現するためのパターン、Singletonパターンを使用する。
<?php class Singleton { private $singleton; private function __construct() { echo "インスタンスを生成しました。<br />"; } public static function getInstance() { $singleton = new Singleton(); return $singleton; } } ?>
Singletonクラスのコンストラクタはpraivateになっている。
これはSingletonクラス外からコンストラクタを呼び出そうとしてもエラーにするため。
<?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(); ?>
唯一のインスタンスを得るためのstaticメソッドをもっており、 いつも同じインスタンスを返す。
インスタンスが複数存在すると、
互いに影響しあって思いがけないバグを生み出す可能性がある。
しかしインスタンスが1つしかないという保証があれば、
その心配をせず安心してプログラミングが出来る。
最初にgetInstanceメソッドが呼び出されたときに、
staticフィールドの初期化が行われ、唯一のインスタンスが作られる。
以下のパターンは、インスタンスが1つである場合が多い。
* Abstract Factoryパターン * Builderパターン * Faceパターン * Prototypeパターン
参考資料