【特点】
1.一个类仅有一个实例
2.它必须自行创建这个实例
3.Preference 对象应该可以被系统中的任何对象使用
4.Preference 对象不应该被储存在会被服务的全局变量中
【单例模式的优点】
1、对唯一实例的受控访问
2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
【单例模式适用场景】
1.数据库频繁访问,使用单例模式, 则可以避免大量的new 操作消耗的资源。
2.如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现.
3.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
2.当这个唯一实例应该是通过子类化可扩展的。并且用户应该无需更改代码就能使用一个扩展的实例时。
1.一个类仅有一个实例
2.它必须自行创建这个实例
3.Preference 对象应该可以被系统中的任何对象使用
4.Preference 对象不应该被储存在会被服务的全局变量中
【单例模式的优点】
1、对唯一实例的受控访问
2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
【单例模式适用场景】
1.数据库频繁访问,使用单例模式, 则可以避免大量的new 操作消耗的资源。
2.如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现.
3.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
2.当这个唯一实例应该是通过子类化可扩展的。并且用户应该无需更改代码就能使用一个扩展的实例时。
【代码示例】
<?php
/**
* 一个简单的单例模式示例
*
*/
class Singleton
{
/**
* 保存全局实例
*/
private static $_instance;
/**
* 私有化默认构造方法,保证外界无法直接实例化
*
*/
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();