單例模式程序代碼:
	 
	1 
	2 /**
	3 * 單例模式
	4 *
	5 * 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)
	6 *
	7 */
	8 class Singleton
	9 {
	10      static private $_instance = null;
	11
	12      private function __construct()
	13      {
	14      }
	15
	16      static public function getInstance()
	17      {
	18          if(is_null(self::$_instance)) {
	19              self::$_instance = new Singleton();
	20          }
	21          return self::$_instance;
	22      }
	23
	24      public function display()
	25      {
	26          echo "it is a singlton class function";
	27      }
	28 }
	29
	30 // $obj = new Singleton(); // 聲明不能成功
	31 $obj = Singleton::getInstance();
	32 var_dump($obj);
	33 $obj->display();
	34
	35 $obj1 = Singleton::getInstance();
	36 var_dump(($obj === $obj1));
	 
	php布局應(yīng)用Singleton分析如以上代碼所反映,
	單例模式屬于創(chuàng)建型模式,它是設(shè)計(jì)模式中最簡(jiǎn)單的一種模式,當(dāng)然它的使用也是無處不在的。
單例模式保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。
當(dāng)需要控制一個(gè)類的實(shí)例數(shù)量,且調(diào)用者可以從一個(gè)公共的眾所周知的訪問點(diǎn)訪問時(shí),我們就可以考慮使用單例模式了。
我們用 UML 來設(shè)計(jì)單例模式,當(dāng)然在以后的設(shè)計(jì)模式的設(shè)計(jì)部分,我們都將采用 UML 來描述我們的設(shè)計(jì),這樣就更為形象化了。
	
	從 UML 設(shè)計(jì)圖中我們可以看出,為了讓一個(gè)類只有一個(gè)實(shí)例,它必須創(chuàng)建一個(gè)靜態(tài)變量,然后我們用一個(gè)公共靜態(tài)的 Instance() 的方法來創(chuàng)建它,但是為了避免這個(gè)類自身的構(gòu)造函數(shù)可以創(chuàng)建對(duì)象,我們將構(gòu)造函數(shù)設(shè)置成 protected 或者 private,這樣外部就只能通過 Instance() 的方法來創(chuàng)建一個(gè)靜態(tài)的 Singleton 類。看來這樣我們達(dá)到了我們的目的,接下來我們看代碼:
	view source
	print?1 public class Singleton  { 
2 private static Singleton instance;
3 protected Singleton()
4 public static Singleton Instance() {
5 if(instance != null) instance = new Singleton();
6 return instance;
7 }
8 }
由此看來,實(shí)現(xiàn)單例模式我們可以做下列幾步:
	在類中創(chuàng)建一個(gè)靜態(tài)變量,變量類型為當(dāng)前類;
	在類中創(chuàng)建一個(gè)公共的靜態(tài)方法,讓用戶可以通過此方法創(chuàng)建此類的靜態(tài)對(duì)象;
	最后將構(gòu)造函數(shù)設(shè)置為 protected 或者 private。
Copyright@ 2011-2016 版權(quán)所有:大連千億科技有限公司 遼ICP備11013762-3號(hào) google網(wǎng)站地圖 百度網(wǎng)站地圖 網(wǎng)站地圖
公司地址:大連市沙河口區(qū)中山路692號(hào)辰熙星海國(guó)際2317 客服電話:0411-39943997 QQ:2088827823 37482752
法律聲明:未經(jīng)許可,任何模仿本站模板、轉(zhuǎn)載本站內(nèi)容等行為者,本站保留追究其法律責(zé)任的權(quán)利! 隱私權(quán)政策聲明