单例模式的特点:
1、一个类只有一个实例
2、它必须自行创建这个实例
3、必须自行向
单例模式中主要角色
Singleton 定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类方法。负责创建它的唯一的实例。
单例模式的优点
1、对唯一实例的受控访问
2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
4、允许可变数目的实例(多例模式)
5、比类操作更灵活
PHP单例模式三要素
1. 需要一个保存类的唯一实例的静态成员变量。
2. 构造函数和克隆函数必须声明为私有的,防止外部程序创建或复制实例副本。
3. 必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用。
代码示例
<?php /** * 单例模式 * @package design pattern */ /** * 懒汉式单例类 */ class Singleton { /** * 静态成品变量 保存全局实例 */ private static $_instance = NULL; /** * 私有化默认构造方法,保证外界无法直接实例化 */ private function __construct() { } /** * 静态工厂方法,返还此类的唯一实例 */ public static function getInstance() { if (is_null(self::$_instance)) { self::$_instance = new Singleton(); } return self::$_instance; } /** * 防止用户克隆实例 */ public function __clone(){ die('Clone is not allowed.' . E_USER_ERROR); } /** * 测试用方法 */ public function test() { echo 'Singleton Test!'; } } /** * 客户端 */ class Client { /** * Main program. */ public static function main() { $instance = Singleton::getInstance(); $instance->test(); } } Client::main();
PHP中不支持饿汉式的单例模式
因为PHP不支持在类定义时给类的成员变量赋予非基本类型的值。如表达式,new操作等等
cr:http://www.phppan.com/2010/06/php-design-pattern-6-singleton/