单例模式

单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。所有的单例模式至少拥有以下三种公共元素一般来说比较适用数据库连接对象

介绍

单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。所有的单例模式至少拥有以下三种公共元素一般来说比较适用数据库连接对象

  • 必须拥有一个构造函数,并且必须标记为private
  • 必须拥有一个保存实例对象的静态成员变量
  • 必须拥有一个访问这个实例的public function

单例类不能在其他类中做初始化,只能被自己实例话;不会创建实例副本,而是会给存储实例的成员变量赋值

PHP代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
class Single{
private $name;
//声明私有构造方法为了防止外部代码使用new来创建对象。
private function __construct()
{
}
//声明克隆方法为了防止外部代码使用clone来复制对象。
private function __clone()
{
// TODO: Implement __clone() method.
}

public static $instance;//保存在类中的唯一实例
//声明一个静态方法,用于检测是否有实例化对象
public static function getInstance()
{
if(!self::$instance){
self::$instance = new self();
}
return self::$instance;
}
public function setTag($n)
{
$this->name = $n;
}
public function getTag(){
return $this->name;
}
}
//创建实例
$a = Single::getInstance();
$b = Single::getInstance();
$a->setname('hello');
$b->setname('go-die');
echo $a;//go-die
echo $b;//go-die

提问

1. 为什么这里的getInstance方法要用静态方法呢?

答: 单例类不能进行实例化,只能通过静态方法,内部进行实例化

文章作者: Luis
文章链接: https://warrest.github.io/2020/05/08/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Luis's Blog