多例模式 Multiton Pattern

未匹配的标注

定义

多例是单例的一种延伸。是指一个类有多个相同实例,而且该实例都是该类本身。

设计的原则和思想

  1. 解耦了对象的创建和使用。
  2. 不变部分是使用,变化部分是创建。
  3. 核心思想是限制对象的数量,并且对对象进行重复使用。

一句话概括设计模式

一个类有多种形态,并且每一种形态是一个单例。

结构中包含的角色

Multiton 多例对象

最小可表达代码

final class Multiton
{
    private static $instanceNum = 3;
    private static $instances = [];

    // 不能创建实例
    private function __construct(){}

    // 不能克隆
    private function __clone(){}

    // 不能序列化
    private function __wakeup(){}

    // 获取实例
    public static function getInstance() : self
    {
        self::initInstances();

        return self::$instances[rand(0, self::$instanceNum - 1)];
    }

    // 初始化多个实例
    public static function initInstances()
    {
        if (count(self::$instances) <= 0) {
            for ($i = 0; $i < self::$instanceNum; $i++) {
                self::$instances[$i] = new static();
            }
        }
    }
}

$multiton = Multiton::getInstance();
var_dump($multiton);

实际应用场景

  1. 多个数据库连接器。MySQL,SQLite,redis, mongo…
  2. 多个记录器。记录调试消息,记录错误消息,记录普通消息
  3. VIP用一个数据库,普通用户用另外一套数据库。
  4. Laravel的Request类,每个请求都会有不同的参数,所以这里就是多例。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
发起讨论 查看所有版本


暂无话题~