美文网首页设计模式
设计模式 单例模式

设计模式 单例模式

作者: Yohann丶blog | 来源:发表于2020-06-09 10:15 被阅读0次
WechatIMG28.jpeg

介绍

wiki:单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用 getInstance 这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。

角色

角色 说明
Single 单例类

角色示例

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

UML类图

单例模式.jpg

代码

<?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,内容如上。

执行

$ 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"
}

相关文章

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 基础设计模式:单例模式+工厂模式+注册树模式

    基础设计模式:单例模式+工厂模式+注册树模式 单例模式: 通过提供自身共享实例的访问,单例设计模式用于限制特定对象...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • 设计模式之单例模式

    单例设计模式全解析 在学习设计模式时,单例设计模式应该是学习的第一个设计模式,单例设计模式也是“公认”最简单的设计...

网友评论

    本文标题:设计模式 单例模式

    本文链接:https://www.haomeiwen.com/subject/wbxstktx.html