PHP很简单PHP经验分享程序员技术栈

设计模式[创建型]05--多例模式(Multiton)

2019-06-05  本文已影响0人  四月不见

一、简介

多例模式被公认为是 反面模式,为了获得更好的可测试性和可维护性,请使用『依赖注入模式』。

多例模式实际上就是单例模式的推广,是指存在一个类有多个相同实例,而且该实例都是该类本身。这个类叫做多例类。 其的特点是:

二、场景

三、类结构

多例模式结构如下:

角色 简述
Multiton 一般是一个多例类或是接口

四、UML图

五、代码分析

final class Multiton
{
    const INSTANCE_1 = '1';
    const INSTANCE_2 = '2';
    /**
     * @var Multiton[]
     * 实例数组
     */
    private static $instances = [];
    /**
     * this is private to prevent from creating arbitrary instances
     * 构造方法声明为私有方法,禁止外部程序使用new实例化
     */
    private function __construct() {
    }

    // 这是获取当前类对象的唯一方式
    public static function getInstance(string $instanceName): Multiton
    {
        if (!isset(self::$instances[$instanceName])) {
            self::$instances[$instanceName] = new self();
        }
        return self::$instances[$instanceName];
    }

    /**
     * prevent instance from being cloned
     *  声明成私有方法,禁止克隆对象
     */
    private function __clone() {
    }

    /**
     * prevent instance from being unserialized
     * 声明成私有方法,禁止重建对象
     */
    private function __wakeup() {
    }
}
上一篇 下一篇

猜你喜欢

热点阅读