php设计模式之实现单例模式(singleton)

444 查看

单例模式(Singleton):用于为一个类生成一个唯一的对象。
最常用的地方是数据库连接。 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类。

单例模式(singleton)有三个特点
1、一个类只能有一个实例
2、它必须自行创建这个实例
3、它必须自行向整个系统提供这个实例

代码示例:

/**
 * 单例类
 * Singleton.class
 */
class Singleton  
{  
   /**
    * 静态成品变量 保存全局实例
    */
    private static $_instance = NULL;
    
     /**
      * 私有化默认构造方法,保证外界无法直接实例化
      */
       private function __construct() 
       {
    
       }
       
    /**
      * 静态工厂方法,返还此类的唯一实例
      */
     public static function getInstance() {
      if (is_null(self::$_instance)) {
       self::$_instance = new Singleton();
       
       // 或者这样写
       // self::$_instance = new self();
      }
     
      return self::$_instance;
     }
     
   /**
    * 防止用户克隆实例
    */
     public function __clone(){
      die('Clone is not allowed.' . E_USER_ERROR);
     }
     
  /**
   * 测试用方法
   */
   public function test()
   {
      echo 'Singleton Test OK!';
   }
     
}  

/**
 * 客户端
 */
class Client {
 
  /**
  * Main program.
  */
 public static function main() {
  $instance = Singleton::getInstance();
  $instance->test();
 }
}
 
Client::main();

测试

include "Singleton.class";
$test_obj = Singleton::getInstance();
$ret = $test_obj->test();