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

一、简介

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

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

  • 多例类可以有多个实例。
  • 多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。

二、场景

  • 2 个数据库连接器,比如一个是 MySQL ,另一个是 SQLite
  • 多个记录器(一个用于记录调试消息,一个用于记录错误)

三、类结构

多例模式结构如下:

角色 简述
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() {
    }
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容