前言
之前做了工厂模式的笔记,这里继续做一下单例模式的笔记。
关于单例模式,网上有不少版本,大多雷同。
个人觉得,这个设计模式,我们只需要了解其实现原理和其作用即可,毕竟其作用还是可以通过其它方式来代替的,比如依赖注入管理器。
概念
保证某一个类创建之后,之后所有的流程中,这个类不会再次创建。保证其在整个流程中的唯一性。
示例
主要要注意几点。
1、必须有一个存储类实例化后的静态变量
2、必须提供一个静态的实例化方法
3、建议将构造方法 __construct
设置为私有
4、建议将魔术方法 __clone
设置为私有
之后的两个建议,是网上各个版本的不同之处,其实只要用的规范,后面两点可以不做。
下面的例子写的是没有参数的版本,如果有参数,请酌情添加。
<?php
class Demo
{
/**
* 存储实例化类的静态常量
*
* @var Demo
*/
protected static $instance;
/**
* 提供外部调用的静态方法
*
* @return Demo
*/
public static function getInstance()
{
if (!self::$instance) {
self::$instance = (new self());
}
return self::$instance;
}
/**
* 私有化构造函数
*/
private function __construct()
{
# code...
}
/**
* 私有化克隆函数
*/
private function __clone()
{
# code...
}
}
Demo::getInstance();
最后
单例模式是所有模式中最容易理解,也是在项目中运用比较多的设计模式。
网友评论