目录

代码示例

<?php

namespace DesignPattern;

/**
 * Description of Singleton
 * 单例模式
 * @author jm
 */
class Singleton{
    public static  function main(){
        $ls = LazySingleton::getInstance();        
        echo $ls->getName();
    }
}

/**
 * 常用的懒汉单例模式
 */
class LazySingleton{
    
    private static $_instance = null;
    //private 避免类在外部被实例化
    private function __construct()
    {
        ;
    }
    public static function getInstance()
    {
        //getInstance 方法前加同步
        if(self::$_instance == null)
        {
            self::$_instance = new LazySingleton();
        }
        return self::$_instance;
    }
    
    public function getName(){
        return "懒汉JM";
    }
}

Singleton::main();


输出:

懒汉JM

小结

单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。

1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。

2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。

3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。

注意

如果编写的是多线程程序,要考虑存在线程安全的问题。比如java中使用官架子关键字 volatile 和 synchronized保证线程安全,但是每次访问时都要同步,会影响性能,且消耗更多的资源,这是懒汉式单例的缺点。


本文部分收藏来自互联网,仅用于学习研究,著作权归原作者所有,如有侵权请联系删除

markdown @TsingChan