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 ?>



    
    
    我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
    分享到: