zoukankan      html  css  js  c++  java
  • 单例模式

    1、模式定义

    简单说来,单例模式的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点。

    常见使用实例:数据库连接器;日志记录器(如果有多种用途使用多例模式);锁定文件。

    2、示例代码

    <?php
    
    namespace DesignPatternsCreationalSingleton;
    
    /**
     * Singleton类
     */
    class Singleton
    {
        /**
         * @var Singleton reference to singleton instance
         */
        private static $instance;
        
        /**
         * 通过延迟加载(用到时才加载)获取实例
         *
         * @return self
         */
        public static function getInstance()
        {
            if (null === static::$instance) {
                static::$instance = new static;
            }
    
            return static::$instance;
        }
    
        /**
         * 构造函数私有,不允许在外部实例化
         *
         */
        private function __construct()
        {
        }
    
        /**
         * 防止对象实例被克隆
         *
         * @return void
         */
        private function __clone()
        {
        }
    
        /**
         * 防止被反序列化
         *
         * @return void
         */
        private function __wakeup()
        {
        }
    }

    3、测试代码

    <?php
    
    namespace DesignPatternsCreationalSingletonTests;
    
    use DesignPatternsCreationalSingletonSingleton;
    
    /**
     * SingletonTest用于测试单例模式
     */
    class SingletonTest extends PHPUnit_Framework_TestCase
    {
    
        public function testUniqueness()
        {
            $firstCall = Singleton::getInstance();
            $this->assertInstanceOf('DesignPatternsCreationalSingletonSingleton', $firstCall);
            $secondCall = Singleton::getInstance();
            $this->assertSame($firstCall, $secondCall);
        }
    
        public function testNoConstructor()
        {
            $obj = Singleton::getInstance();
    
            $refl = new ReflectionObject($obj);
            $meth = $refl->getMethod('__construct');
            $this->assertTrue($meth->isPrivate());
        }
    }
  • 相关阅读:
    技嘉Z390 AORUS MASTER+酷睿I9超频5.0GHz教程
    USDT
    Scopus数据库简介
    windows server 2016 安装网卡驱动
    solr配置同义词,停止词,和扩展词库(IK分词器为例)
    Solr 数字字符不能搜索的一个问题
    solr添加中文IK分词器,以及配置自定义词库
    SQL Server表分区(转)
    税改后每月个人所得税逐月增加
    IIS Express总结
  • 原文地址:https://www.cnblogs.com/webclz/p/10731575.html
Copyright © 2011-2022 走看看