今天开始,LZ将开始进行PHP设计模式的学习,首先学习最简单且常用的单例模式!!!
什么是单例模式
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
为什么使用单例模式呢
使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。
单例模式特点(三私一公)
私有的构造方法 (防止类外实例化)
私有的克隆方法 (防止通过克隆生成对象)
私有的静态属性 (保存类的实例)
公有的静态方法 (调取这个类相当一个接口 )
私有的克隆方法 (防止通过克隆生成对象)
私有的静态属性 (保存类的实例)
公有的静态方法 (调取这个类相当一个接口 )
代码实例
不能被继承
final class single{
// 定义一个私有属性,在构造方法中显示
private $random;
// 定义一个静态私有属性,为的是实例化后赋值给obj
static private $obj;
// 构造方法中random判断实例化的次数,并可进行比较
private function __construct(){
return $this->random=rand(1,999999999);
}
static public function getins(){
// instanceof判断对象是否实例化
if(self::$obj instanceof single)
{
return self::$obj;
}else{
return self::$obj = new single();
}
}
// final类防止被克隆后实例化类被重写
// public function __clone(){
// echo "单例模式失败";
// }
private function __clone(){
echo "单例模式失败";
}
}
// 调用静态方法getins()验证实例化次数
$sing = single::getins();
$sings= single::getins();
var_dump($sing);
echo "
";
var_dump($sings);
echo "
";
// 检测是否只实例化过一次(验证该类只有一个实例);
if($sing == $sings)
{
echo "单例模式成功";
}else{
echo "单例模式失败";
}
?>