11-单例模式
目录
代码示例
<?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 9ong@TsingChan