单例模式(Singleton Pattern)顾名思义,通过这种模式可以保证系统中一个类只有一个实例。
作为一种常用的软件设计模式,单例模式经常被用在数据库操作、缓存、线程池等方面。因为对这些操作来说,只有一个实例很重要,可以避免很多的new操作和连接关闭等操作,减少对系统和内存资源的消耗。
单例模式主要有三个要点:
- 该类只能有一个实例;
- 它必须自行创建这个实例;
- 它必须向整个系统提供这个实例。
实现单例模式类的要点主要有三点:
- 该类只提供私有的构造函数;
- 类定义中含有一个该类的静态私有对象;
- 该类提供一个静态的公有的函数用于创建或获取它本身的静态私有对象。
实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <?php
class Singleton{ private static $_instance = null;
private final function __construct(){ echo "this is construct function"; }
private function __clone(){}
public static function getInstance(){ if(!(self::$_instance instanceof self)){ self::$_instance = new self; } return self::$_instance; }
public function getName(){ echo "this is getName function"; } }
$test = Singleton::getInstance(); $test->getName();
?>
|
使用这一模式的缺点:
- 每次对象请求引用都要检查类的实例是否存在,这需要一些少量的开销;
- 彼此间的依赖关系比较隐蔽,难以调试;
- 因为不能用传统的new方法来创建实例,这可能会发生开发混淆。