单例模式

Posted 奔跑的葛根

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。

复制代码
/**
 * @author xiaojiang
 * 方式1
 */
class father{
    static $models = [];
    static public function getInstance(){
        $name =  get_called_class();
        if( !isset( self::$models[$name] ) ){
            self::$models[$name] = new $name();
        }
        return self::$models[$name];
    }
    
    public function m1(){
        echo "fm1";
    }
    public function m2(){
        echo "fm2";
    }
}
class child extends father{
    public function m1(){
        echo \'cm1\';
    }
}
father::getInstance()->m1();
child::getInstance()->m1();

/**
 * 方式2
 */
 class base{

    static protected  $ins = [];
    
    static public function getInstance(){
        $cName = get_called_class();
        if( !isset(static::$ins[$cName]) ){
            static::$ins[$cName] = new $cName;
        }
        return static::$ins[$cName];
    }
    
    public function m1(){
        return "base m1";
    }
    
    public function m2(){
        return "base m2";
    }
    
}

class cbase extends base{
    
    //static public $ins = null;
    static public function getInstance(){
        return parent::getInstance();
    }
    
    public function m1(){
        return "cbase m1<br>";
    }
    
}


echo base::getInstance()->m1()."<br>";

echo cbase::getInstance()->m1(); 
复制代码

以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

片段作为 Android 中的单例

单例片段或保存网页视图状态

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块