搜尋
首頁php教程php手册PHP单例模式的核心思想

Singleton Pattern(中文称单例模式),可以说是最容易理解的设计模式了,也充分体现了DRY
(Don't Repeat Yourself)的思想。
单例模式的核心思想是:保证一个对象存在且仅允许存在一个实例,并提供一个全局访问方式。
单例模式的运作模型是:当对象第一次被请求时,创建这个对象的实例;之后的每次请求,仅传递已创建实例的句柄。与单例模式相对应的模式叫做Prototype(Java平台下)或者叫SingleCall(.NET平台下),在此种模式下,每次请求一个对象,都将新建一个实例。
在WEB程序中应用单例模式的一个典型例子是数据库连接的创建:通过数据库句柄来连接数据库这一行为是独占的。换言之,在一个句柄尚未关闭之前,你无法第二次创建一个相同名称的句柄。然后在日常编码中,假设你希望在同一页面中操作由数据库传递回来的多组数据。此时如果采用传统的Prototype方式编程,为了程序的安全运行,你可能需要创建多个数据库链接句柄或者重复进行打开/关闭数据库连接的操作。显然,这样的操作会导致程序过度消耗一些不必要的资源。
在此场景下,我们可以运用单例模式来维护和共享同一个数据库句柄。优点有二:
1、提高了程序运行上的安全性。你不必过多的担心和考虑诸如数据库打开/关闭的问题。
2、避免了因创建多个连接导致的不必要资源浪费。垃圾回收机制仅需要对一个链接句柄进行操作。
当然,以上两个问题对于PHP来说并不是问题,PHP的垃圾回收机制就是:当一个页面执行完毕会自动清空所有资源和内存,这里面就包括数据库连接。
至此,可以总结出Singleton单例模式在WEB程序中的运用场合:
1、某些资源本身具有独占性,你不希望在多个地方重复创建对这个独占资源对象的实例。
2、你需要在同一个对象的实例的多个引用之间共享这个对象的状态(下面我会将此条规则进行代码举例)。
下面写一段小代码来演示PHP 5中Singleton的实现:
class Singleton
       {
//此成员变量用来记录此对象的引用次数
private  $counter = 1;
//注意这里是private,即禁止外部程序通过解析函数实例化对象
private function __construct()
       {
}
//禁止克隆这个对象
private function __clone()
       {
}
//必须通过此方法得到对象的引用
public static function getInstance()
       {
  static $instance = null;
  if($instance == null)
         {
   $instance = new Singleton();
  }
  return $instance;
}
public function getUsedCount()
       {
  return $this->counter++;
}
}



陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具