设计模式 单例模式

WechatIMG28.jpeg

介绍

单例模式就是保证一个类只有一个实例对象,不管在何时何地,任何人都只能获取到同一个实例对象。

角色

角色 说明
Single 单例类

角色示例

类名 担任角色 说明
TaskManager Single 单例类,实现任务管理器

UML类图

单例模式.jpg

代码

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
38
39
40
41
42
43
44
45
46
47
<?php 
class TaskManager
{
private static $instance;
private static $taskList;
private static $taskcount;
//私有构造方法,禁止使用new创建对象
private function __construct(){
self::$taskcount++;
$this->taskList = [];
}

public static function getInstance(){
if (!isset(self::$instance)) {
self::$instance = new self;
}
return self::$instance;
}
//将克隆方法设为私有,禁止克隆对象
private function __clone(){}

public function listTask()
{
return $this->taskList;
}

public function setTask($taskList)
{
$this->taskList = array_merge($this->taskList, $taskList);
}

public function getTask($taskId)
{
return $this->taskList[$taskId];
}
}

$taskManager = TaskManager::getInstance();
$taskManager->setTask(
['php','nginx','mysql','redis']
);
$taskManager->setTask(
['elasticsearch','python']
);
echo $taskManager->getTask(3).PHP_EOL;
echo $taskManager->getTask(5).PHP_EOL;
var_dump($taskManager->listTask());

创建 TaskManager.php,内容如上。

执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ php TaskManager.php
redis
python
array(6) {
[0]=>
string(3) "php"
[1]=>
string(5) "nginx"
[2]=>
string(5) "mysql"
[3]=>
string(5) "redis"
[4]=>
string(13) "elasticsearch"
[5]=>
string(6) "python"
}
-------------本文结束感谢您的阅读-------------
0%