设计模式-单例模式

单例模式(Singleton Pattern):
单例模式是实现一个类只有一个实例,而且往往是整个系统中只有一个该实例。

单例模式也是一个创造型的模式

在实例化数据库,缓存,日志中比较常用

那么它是怎么做到的呢
1:要确保一个类只有一个实例,我们用私有静态成员变量来保存这个实例
private static $_instance;

2:构造函数和克隆函数必须声明为私有,防止外部程序new类

// 私有化构造方法,防止new实例
private function __construct()
{

}
// 覆盖__clone()方法,禁止克隆
private function __clone()
{
}

 

3:必须要提供一个能访问这个存私有静态成员变量的公共函数,返回唯一实例的引用

// 用于返回对象实例的公共静态方法
public static function getInstance()
{
  // 判断当前实例是否已经创建
  if (!(self::$_instance instanceof self) ) {
    // 如果没有,则创建
    self::$_instance = new self();
  }
  // 最终返回实例
  return self::$_instance;
}

 


来写一个例子:

<?php

/**
* Class DB 数据库操作类
*/
class Db
{
  private $_db;
  private static $_instance;

  // 私有化构造方法,防止外部new实例
  private function __construct()
  {
     // 这里主要用于连接数据库,细节此处省略
     $this->_db = this->connect_db(); 
  }


  private function connect_db()
  {

  }
  // 覆盖__clone()方法,禁止克隆
  private function __clone() 
  {

  }

  // 返回对象实例
  public static function getInstance()
  {
    // 判断是否存在对象实例
    if(! (self::$_instance instanceof self) ) {
       // 不存在则创建保存
      self::$_instance = new self();
    }
      // 返回对象实例
    return self::$_instance;
  }

  // 其他方法
  public function query(...)
  {

  }

  // 其他方法
  public function insert(...)
  {

  }
}

 

在单例模式的实现过程中,需要注意如下三点:
单例类的构造函数为私有;
提供一个自身的静态私有成员变量;
提供一个公有的静态工厂方法

posted @ 2017-05-24 21:17  九卷  阅读(242)  评论(0)    收藏  举报