LoginSignup
0
0

デザインパターン 〜シングルトンパターン〜

Posted at

シングルトンパターン

クラスのインスタンスが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)
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0