php设计模式 ---单例模式.

单例模式的特点:
     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/

原文地址:https://www.cnblogs.com/nycj/p/14518926.html