面试最常见的问题之一就是 请问您知道哪些设计模式
这次先介绍最经典的单例模式.
单例模式分3种:懒汉式单例、饿汉式单例、登记式单例。
单例模式有以下3个特点:
1.只能有一个实例。
2.必须自行创建这个实例。
3.必须给其他对象提供这一实例。
单例模式的优缺点:
优点:
1. 改进系统的设计
2. 是对全局变量的一种改进
缺点:
1. 难于调试
2. 隐藏的依赖关系
3. 无法用错误类型的数据覆写一个单例
不多废话,直接上代码. 有注释
<?php
class
Model
{
public
static
$instance
;
//模式的关键,一个静态变量,储存自身
public
static
function
getInstance()
{
if
(!
static
::
$instance
)
static
::
$instance
=
new
Model();
//如果常量不存在(第一次使用才会执行),则实例化(懒汉模式,不调用则不实例化)
return
static
::
$instance
;
//不管是第一次或是第n次.$instance都已经被初始化
}
private
function
__construct(){}
private
function
__clone(){}
public
function
getData()
{
return
'data'
;
}
}
//$model = new Model();//报错,因为不允许直接实例化,也不允许克隆
$smodel
= Model::getInstance();
//调用一次
$smodel2
= Model::getInstance();
//再调用一次
var_dump(
$smodel
,
$smodel2
);
//打印发现,两个资源号完全一样