📖
デザインパターンを学ぶ #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