📖

デザインパターンを学ぶ #1 Singleton(シングルトン)

に公開

1. はじめに

デザインパターン学習シリーズの1本目。
今日はシングルトンパターンを取り上げます。
目的は「インスタンスを1つだけに制御する方法」を理解することです。

2. シングルトンとは?

特定のクラスのインスタンスが「必ず1つ」になるようにするパターンです。
よく使われる場面としては以下があります。

  • 設定管理
  • ログ出力
  • 接続プール

3. 実装例(PHP)

class Logger
{
    private static $instance;

    private function __construct() {
        // 外部から new できないように private コンストラクタ
    }

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function log($message) {
        echo "[LOG] " . $message . PHP_EOL;
    }
}

// 使用例
$logger1 = Logger::getInstance();
$logger2 = Logger::getInstance();

var_dump($logger1 === $logger2); // true(同じインスタンス)
$logger1->log("Hello Singleton!");

4. メリットと注意点

メリット

  • インスタンスが1つに制御される(管理が楽)
  • 共通リソース(設定、ログ)を扱いやすい

デメリット

  • グローバル状態を持つことになるためテストがしにくい
  • 乱用すると依存が隠れてコードが複雑化する

5. 実務での利用例

  • Laravelの Facade(内部的には Singleton+DI の仕組み)
  • DB接続やロガーなど「1つで十分なもの」

6. まとめ

Singletonは「インスタンスを1つにするパターン」。
シンプルだけど実務でもよく出てくる重要な基礎です。
次回は Factory 系のパターンを紹介する予定です。

Discussion