定义:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,提供全局访问的方法。
要点:1、某个类只能有一个实例。2、必须自行创建这个实例。3、必须向整个系统提供这个实例。
角色:
singleton单例角色类
在单例类的内部只生成一个实例,同时提供一个静态的getinstance工厂方法,让客户可以使用它的唯一实例
单例模式的实现过程中,需要注意:
- 单例类的构造函数为私有。
- 提供一个自身的静态私有成员变量。
- 提供一个公有的静态工厂方法。
- 克隆方法私有化。
类图:
代码:
singleton
class Singleton
{
// 创建静态私有的变量保持该类对象
private static $instance;
// 私有化克隆类,防止克隆
private function __clone(){}
// 防止使用new直接创建对象
// private function __construct(){}
static public function getinstance(){
if(self::$instance instanceof self){
self::$instance = new Singleton();
}
return self::$instance;
}
public function test(){
echo "单例模式";
}
}
Client
require_once 'Singleton.php';
$pattern = Singleton::getinstance();
$pattern2 = Singleton::getinstance();
if($pattern1 == $pattern2){
echo "相等";
}else{
echo "不相等";
}
实例:
某软件公司承接了一个服务器负载均衡(Load Balance)软件的开发工作,该软件运行在一台负载均衡服务器上,可以将并发访问和数据流量分发到服务器集群中的多台设备上进行并发处理,提高了系统的整体处理能力,缩短了响应时间。由于集群中的服务器需要动态删减,且客户端请求需要统一分发,因此需要确保负载均衡器的唯一性,只能有一个负载均衡器来负责服务器的管理和请求的分发,否则将会带来服务器状态的不一致以及请求分配冲突等问题。如何确保负载均衡器的唯一性是该软件成功的关键,请使用单例模式设计服务器负载均衡器。
太复杂了,我写不来