Singleton Pattern

單例模式定義:

Ensure a class has only one instance, and provide a global point of access to it.

類別圖

PlantUML code

class Singleton {
  - {static} instance
  + {static} instance(): Singleton
}

Singleton -> Singleton
class Config
{
    private static $instance = null;
    
    private function __construct()
    {
    }
    
    public static function getInstance()
    {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}

擴展的 singleton

class Factory
{
    private static $instance = array();
    
    private function __construct()
    {
    }
    
    public static function getInstance($type)
    {
        if (!isset(self::$instance[$type])) {
            self::$instance[$type] = new $type();
        }
        return self::$instance[$type];
    }
}
  • 使用 static function 取得實例
  • 減少記憶體消耗,增加系統效能
  • 通常沒有介面,所以想擴展只能改原始碼