php设计模式之单例、多例设计模式
添加时间:2013-6-17 点击量:
单例(Singleton)模式和不常见的多例(Multiton)模式把握着应用法度中类的数量。如模式名称,单例只能实例化一次,只有一个对象,多例模式可以多次实例化。
基于Singleton的特点,我们经常用Singleton设备应用法度并定义应用法度中可能随时接见的变量。但有时并不推荐应用Singleton,因为它生成了一个全局状况且
该单一根对象没有封装任何体系功能。多半景象下,会使单位测试和调试变得艰苦。读者按照景象自行决意。
代码示例:
<?php
class SingletonExample{
private function __construct(){}//防止直接实例化
public static function getInstance(){ //不与任何对象有接洽关系
static ¥instance=null; //调用此函数的所有代码共享该变量,不须要让其是类的静态变量
if(¥instance==null){
¥instance=new SingletonExample();
}
return ¥instance;
}
}
¥obj1=SingletonExample::getInstance();
¥obj2=SingletonExample::getInstance();
var_dump(¥obj1===¥obj2);// true 是同一个实例
?>
Multiton与singleton类似,不合的是后者须要getInstance()函数传递关键值。
对于给定的关键值只会存在独一的对象实例,若是有多个节点,每个节点拥有独一的表识符,且各个节点在某单次履行(如cms里的节点)可能呈现多次,那么就可以用Multiton模式实现这些节点啊,Multiton节俭内存,并确保同一个对象的多个实例不产生冲突.
示例:
1 <?php
2 class MultitonExample{
3 private function __construct(){}//防止直接实例化
4
5 public static function getInstance(¥key){
6 static ¥instance=array();
7 if(!array_key_exists(¥key,¥instance)){
8 ¥instance[¥key]=new SingletonExample();
9 }
10 return ¥instance(¥key);
11 }
12
13 };
14 ?>
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
单例(Singleton)模式和不常见的多例(Multiton)模式把握着应用法度中类的数量。如模式名称,单例只能实例化一次,只有一个对象,多例模式可以多次实例化。
基于Singleton的特点,我们经常用Singleton设备应用法度并定义应用法度中可能随时接见的变量。但有时并不推荐应用Singleton,因为它生成了一个全局状况且
该单一根对象没有封装任何体系功能。多半景象下,会使单位测试和调试变得艰苦。读者按照景象自行决意。
代码示例:
<?php
class SingletonExample{
private function __construct(){}//防止直接实例化
public static function getInstance(){ //不与任何对象有接洽关系
static ¥instance=null; //调用此函数的所有代码共享该变量,不须要让其是类的静态变量
if(¥instance==null){
¥instance=new SingletonExample();
}
return ¥instance;
}
}
¥obj1=SingletonExample::getInstance();
¥obj2=SingletonExample::getInstance();
var_dump(¥obj1===¥obj2);// true 是同一个实例
?>
Multiton与singleton类似,不合的是后者须要getInstance()函数传递关键值。
对于给定的关键值只会存在独一的对象实例,若是有多个节点,每个节点拥有独一的表识符,且各个节点在某单次履行(如cms里的节点)可能呈现多次,那么就可以用Multiton模式实现这些节点啊,Multiton节俭内存,并确保同一个对象的多个实例不产生冲突.
示例:
1 <?php
2 class MultitonExample{
3 private function __construct(){}//防止直接实例化
4
5 public static function getInstance(¥key){
6 static ¥instance=array();
7 if(!array_key_exists(¥key,¥instance)){
8 ¥instance[¥key]=new SingletonExample();
9 }
10 return ¥instance(¥key);
11 }
12
13 };
14 ?>
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》