今天我們一起來學習單例模式:
首先要弄明白,什么叫單例模式?
概念: 在任何時候,應用程序中都只會有這個類僅有的一個實例存在。
單例模式也被認為是職責模式,因為它將創建對象的控制權委托到一個單一的訪問點上。
其次,這么做的好處在哪?
這可以防止我們去打開數據庫的多個連接或者不必要的使用多余的系統資源。在復雜的系統中,還可以起到維護應用程序狀態的作用。
最后:它有哪些典型特征?
1.它至少要有一個構造函數,并且被標記為私有(PRivate)
2.擁有一個保存類的實例的靜態成員變量。
3.擁有一個可以訪問這個實例的公共的靜態方法。
和普通類不同的是,單例類不能在其它類中直接實例化,只能被其自身實例化。要做到這一點,必須要私有化它的構造函數,并且防止被克隆。用代碼來實現一個單例,我們以創建數據庫的連接為例:
//get data classclass DB { private $_db; private static $_instance; private function __construct(){ $DSN = '../../content/xxtebook.db'; $this->_db = new PDO('sqlite:'.$DSN); } //初始化數據庫連接 public static function initDB(){ if(! (self::$_instance instanceof self)){ self::$_instance = new self(); } return self::$_instance; } //其它方法 private function __clone(){} public function query($sql){} //....}
在外部使用這個單例:
$db = DB::initDB();//$db->somMethod();
另外對于哪些方法用靜態,哪些方法不用,我的想法就是,如果方法內部要訪問$this變量的,那么就不應當用靜態方法,反之則可以用靜態。也就是說,靜態方法不需要通過例實對象就可以使用。
下一次我們再一起學習工廠模式
新聞熱點
疑難解答