シングルトンパターン
クラスのインスタンスが1つだけということを保証し、
そのインスタンスへグローバルなアクセスポイントを提供する。
汎用的に使われるヘルパー関数、ユーティリティ関数などに使われる。
例)
オフィスに1台だけコーヒーメーカーがあるとする。これにより以下のメリットがある。
- 一貫性
- コーヒーメーカーが一つしかないため、どこからだれが作っても同じコーヒーが作れる
- リソース節約(保守性)
- コーヒーメーカーを1台だけにすることで、会社のコストやスペースの節約になる
- グローバルアクセス
- オフィスのどこからでも、そこに行けばコーヒーメーカを使えるため便利
コードを書いてみる
class CoffeeMaker {
// 唯一のインスタンスを保持する静的プロパティ
private static $instance;
// プライベートコンストラクタで外部からのインスタンス化を防ぐ。
private function __construct() {
// オフィスにいる人(このクラスにアクセスした場合)のみ、コーヒーメーカーを使えるようにする。
}
public static function getInstance() {
if(self::$instance === null) {
self::$instance = new CoffeeMaker();
}
return self::$instance;
}
public function brewCoffee() {
echo 'コーヒーつくります!';
}
}
// オフィスのどこからでもアクセス可能
$coffeeMaker1 = CoffeeMaker::getInstance();
$coffeeMaker2 = CoffeeMaker::getInstance();
$coffeeMaker1->brewCoffee(); // > 'コーヒーつくります!'
$coffeeMaker1->brewCoffee(); // > 'コーヒーつくります!'
// 同じコーヒーメーカーである
var_dump($coffeeMaker1 === $coffeeMaker2); // > bool(true)