首頁 > php教程 > PHP开发 > PHP 中實作 Singleton 模式和 Monostate 模式

PHP 中實作 Singleton 模式和 Monostate 模式

黄舟
發布: 2016-12-21 10:54:00
原創
1148 人瀏覽過

通常來說,類別和物件(類別的實例)之間是一對多的關係。但是某些情況下,我們只
需要一個類別的一個實例。例如多個實例的多樣性反倒會帶來一些不可控因素,多
次的實例化,是一種資源的浪費,降低了效率;又如他們是工廠物件(factory
object),用來創建系統中的其他對象,等等。這時候,較好的處理方式就是讓類別
的實例具有單一性:保障這個類別在運作過程中最多產生一個實例( Singleton 模
式),或是讓所有的實例保持一致( Monostate 模式)。

PHP下實作Singleton 模式範例:

<?php
 classSingleton
 {
      privatestatic$instance;
 
      privatefunction__construct()
      {
      }
 
      publicstaticfunctioninstance()
      {
          if(self::$instance==null)
          {
              self::$instance=newSingleton();
          }
 
          returnself::$instance;
      }
 }
 ?>
登入後複製

建立singleton 類別實例就只能夠是這樣了:

$instance=Singleton::instance();
 // 这样是错误的: $instance = new Singleton();
登入後複製

詳細分析一下PHP 下實現的singleton 模式的特徵:

1. 一個正確分析一下PHP 下實現的singleton 模式的特徵:

1. 一個staticic, private 屬性:保存一個實例,static 保證類別不被實例化

也能夠被類別方法呼叫, private 保證它不被類別的實例等改變。

2. 一個 private 的建構方法:不允許該類別在本類別之外的地方實例化。

3. 一個 static, public 方法:負責建立實例並保證其唯一性。 static 使該方

法可以不被實例化即可被呼叫。

跟下面的 monostate 比,它的優點在於:

1. 適應任何類,滿足上面的三個特徵即可。

2. 可以統購派生創建,給定一個類,可以創建它的一個 singleton 子類。

缺點:

1. singleton 特性不能夠被繼承,其子類別就不是 singleton 類別了。

2. 使用不通明,使用者必須知道它使用的是一個 singleton 類,而不能夠透過

new 來實例化。

monostate 模式的基本原理就是讓 monostate 類別的所有實例使用起來是同一個實

例一樣。實際上把類別的所有屬性都使用 static 聲明即可:

<?php
 classmonostate
 {
      privatestatic$itsX=0;
      
      publicfunction__construct()
      {
          
      }
      
      publicfunctionsetX($x)
      {
          self::$itsX=$x;
      }
      
      publicfunctiongetX()
      {
          returnself::$itsX;
      }
 }
 ?>
登入後複製
 以上就是PHP 中實現 Singleton 模式和 Monostate 模式的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!


🎜🎜
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板