国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP設計模式:單例模式(Singleton)

2024-09-04 11:32:23
字體:
來源:轉載
供稿:網友

單例模式,即某個類只有一個實例。通過單例模式可以保證系統中一個類只有一個實例而且該實例易于外界訪問,從而方便對實例個數的控制并節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。

要實現這一點,可以從客戶端對其進行實例化開始。因此需要用一種只允許生成對象類的唯一實例的機制,“阻止”所有想要生成對象的訪問。

對于系統中的某些類來說,只有一個實例很重要,例如,一個系統中可以存在多個打印任務,但是只能有一個正在工作的任務;一個系統只能有一個窗口管理器或文件系統;一個系統只能有一個計時工具或ID(序號)生成器。如在Windows中就只能打開一個任務管理器。如果不使用機制對窗口對象進行唯一化,將彈出多個窗口,如果這些窗口顯示的內容完全一致,則是重復對象,浪費內存資源;如果這些窗口顯示的內容不一致,則意味著在某一瞬間系統有多個狀態,與實際不符,也會給用戶帶來誤解,不知道哪一個才是真實的狀態。因此有時確保系統中某個對象的唯一性即一個類只能有一個實例非常重要。

顯然單例模式的要點有三個;一是某個類只能有一個實例;二是它必須自行創建這個實例;三是它必須自行向整個系統提供這個實例。

從具體實現角度來說,就是以下三點:一是單例模式的類只提供私有的構造函數,二是類定義中含有一個該類的靜態私有對象,三是該類提供了一個靜態的公有的函數用于創建或獲取它本身的靜態私有對象。

在PHP中實現單例模式的源代碼如下一種形式:

1 <?php
2 /**
3 * 單例模式
4 *
5 * 保證一個類僅有一個實例,并提供一個訪問它的全局訪問點
6 *
7 */
8 class Singleton
9 {
10 staticprivate$_instance=null;
11
12 privatefunction __construct()
13 {
14 }
15
16 staticpublicfunction getInstance()
17 {
18 if(is_null(self::$_instance)) {
19 self::$_instance=new Singleton();
20 }
21 return self::$_instance;
22 }
23
24 publicfunction 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));

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 神木县| 黎城县| 安福县| 托克托县| 新蔡县| 承德县| 东兴市| 赤峰市| 伊金霍洛旗| 泗洪县| 霍山县| 老河口市| 什邡市| 莱西市| 仙桃市| 许昌县| 南京市| 微博| 吐鲁番市| 师宗县| 郎溪县| 安顺市| 涟水县| 仁布县| 如东县| 磴口县| 塔河县| 广饶县| 句容市| 清苑县| 曲周县| 周至县| 长乐市| 海晏县| 平武县| 和田县| 承德县| 关岭| 浦江县| 汝南县| 巫山县|