单件模式

上一篇 / 下一篇  2007-10-26 08:13:23 / 个人分类:php设计模式

9c7`U oix0class DbConn {
J;r?;~B$wy#q&@-O0/**爱踢博客社区d'A9H m8s
* static property to hold singleton instance
Zj:`b-Gs |h5^0*/爱踢博客社区Q9YIz/R
static $instance = false;爱踢博客社区N#Hh {5d Q dM
/**
/PB3IKE B0* constructor
i`SJ4]a!y3K0* private so only getInstance() method can instantiate爱踢博客社区h#e-I"HA9e0[;P
* @return void
A Gtpy9KVs)e @0*/
y9mE8Nv Roo0private function __construct() {}
)Mo_j9cr+U0/**爱踢博客社区k\(F(N[W4j LAGk
* factory method to return the singleton instance
#J+f$y$|;W v3m w0* @return DbConn爱踢博客社区Ez4Eo(_L{@
*/爱踢博客社区K.@-z1Jtc
public function getInstance() {爱踢博客社区OC P~Q+[
if (!DbConn::$instance) {
.T7]h[ bwjW0DbConn::$instance = new DbConn;爱踢博客社区-E2}pdu
}
:C%I!o.F*bjJ0return DbConn::$instance;
4wZ0E5Q,l6c0[/tu0}
y(v3Pz,ms7k.j.|v0}

Bi!qA&j0Monostate Pattern(单态模式):类单件模式
%R eT f$_Z/[g$i;O0有时候,我们需要这样一个类,所有类的实例都共享它的全局状态――换句话说,它所产生的任何实例返回严格一致的信息。爱踢博客社区z*u1fd6p]c$B L)D.j

uJ6y'tn h%o0class ApplicationConfig {
*OP A:X0mN&k*E0var $_state;爱踢博客社区'PpD7N]@1i7C1B,i
function ApplicationConfig() {
:T,y VU @oNZ+K0$key = ‘__stealth_singleton_state_index__’;
5]sk)TP?~0if (!(array_key_exists($key, $GLOBALS)
&A4H0@2gb0&& is_array($GLOBALS[$key]))) {爱踢博客社区^ RR7CY
$GLOBALS[$key] = array();爱踢博客社区M\-]$}&n#Gcx&h+g
}爱踢博客社区^+rRK5O
$this->_state =& $GLOBALS[$key];爱踢博客社区~?Wn3o^t
}爱踢博客社区W'Or|k+dl:[D
function set($key, $val) {爱踢博客社区4b?K1VPpcE
$this->_state[$key] = $val;爱踢博客社区%B2o']"B]V:oN y
}
;I,] } bw8TaF0function get($key) {爱踢博客社区8OF(^ R4WPZ:Z'Z
if (array_key_exists($key, $this->_state)) {
-}yM'@$Sm uy ?/t w0return $this->_state[$key];
^V_Ig-eu6q'j'U.w0}爱踢博客社区3m%ZW PG/E)X2oL
}爱踢博客社区 n#]k/K5|z

这个技巧的核心是$this->state =& $GLOBALS[$key]; 。在确定$GLOBALS[$key]是一个数组后,代码绑定一个全局数组的引用给类变量$this->state。从而,任何$this->state的改变都自然而言地同步到全局数组,包括类的其它实例。

TAG: PHP php

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar