资讯专栏INFORMATION COLUMN

【php实现设计模式】之单例模式

shery / 3120人阅读

摘要:单例模式是最常用,也是最简单的一种设计模式。什么是单例模式他是一个特殊的类,该类在系统运行时只有一个实例。这个类必须提供一个获取对象实例的方法。可以参考鸟哥的这遍文章,经测试在下是有效的破坏单例

单例模式是最常用,也是最简单的一种设计模式。

什么是单例模式
他是一个特殊的类,该类在系统运行时只有一个实例。这个类必须提供一个获取对象实例的方法。

有什么作用
1.全局只创建一次实例,提高性能,减少资源损耗
2.自已统一创建实例,具有可控性

注意事项
1.需要保证一个运行周期只有一个实例存在,所以任何会创新新实例的方法都要禁用(设为私有)
1) 禁止外部创建实例
2) 禁止实例克隆
2.不要滥用单例模式

代码示例

class RedisLogic
{

    private static $_instance = null;

    static $data = [];

    /**
     * SingletonClass constructor.
     * 禁止外部创建实例
     *
     */
    private function __construct()
    {
    }

    /**
     * 禁止克隆
     *
     * @throws Exception
     */
    private function __clone()
    {
        throw new Exception("单例模式,不允许克隆");
    }
    
    /**
     * 禁止serialize
     *
     */
    private function __sleep() {
    }
 
    /**
     * 禁止unserialize
     *
     */
    private  function __wakeup() {
    } 
    
    public static function getInstance()
    {
        if (self::$_instance == null) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    /**
     * @param string $key
     * @param string $extend
     * @param int $type
     * @param array $options
     * @return mixed
     */
    public function read($key, $extend = "", $type = 1, $options = [])
    {
        global $cur_lang;

        $relKey = $this->getKey($key, $extend, $type);
        if (isset(static::$data[$relKey])) {
            return static::$data[$relKey];
        }
        // ... 省略业务代码

        return static::$data[$relKey] = $value;
    }

    public function write($key, $data, $options = [], $extend = "", $type = 1)
    {
        $relKey = $this->getKey($key, $extend, $type);
        // ... 省略业务代码
    }

    /**
     * @param $key
     * @param string $extend
     * @param int $type 扩展类型,1是扩展在后,2在前
     * @return int
     */
    private function getKey($key, $extend = "", $type = 1)
    {
        if (empty($extend)) {
            return $key;
        }

        return $type == 1 ? $key . $extend : $extend . $key;
    }
}

demo 禁止系列化,有的情况可能需要这样。可以参考鸟哥的这遍文章,经测试在php5下是有效的

Serialize/Unserialize破坏单例

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28203.html

相关文章

  • 大话PHP设计模式单例模式

    摘要:上面是简单的单例模式,自己写程序的话够用了,如果想继续延伸,请传送至大话设计模式之单例模式升级版 看了那么多单例的介绍,都是上来就说怎么做,也没见说为什么这么做的。那小的就来说说为什么会有单例这个模式以便更好的帮助初学者真正的理解这个设计模式,如果你是大神,也不妨看完指正一下O(∩_∩)O首先我不得不吐槽一下这个模式名字单例,初学者通过字面很难理解什么是单例,我觉得应该叫唯一模式更贴切...

    VEIGHTZ 评论0 收藏0
  • 大话PHP设计模式单例模式升级版

    摘要:用来指向已创建好的实例构造函数为空注意这里是关键这是我们需要调用的方法把函数也定义为空,这样就大功告成啦。 接上一篇大话PHP设计模式之单例模式 这一篇介绍一下升级版的单例模式,废话不说先上代码 不完美的单例模式 class singleMode { //用来指向已创建好的实例 public static $instance; //判断是...

    darcrand 评论0 收藏0
  • 优才公开课笔记:php设计模式(一) 单例模式

    摘要:最近开展了三次设计模式的公开课,现在来总结一下设计模式在中的应用,这是第一篇创建型模式之单例模式。不过因为不支持多线程所以不需要考虑这个问题了。 最近开展了三次设计模式的公开课,现在来总结一下设计模式在PHP中的应用,这是第一篇创建型模式之单例模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设计经验的总结。 设计模式不...

    guyan0319 评论0 收藏0
  • PHP设计模式单例模式

    摘要:简介单例模式是指整个应用中类只有一个对象实例的设计模式。它是一种常见的设计模式,在计算机系统中,线程池缓存日志对象对话框打印机数据库操作显卡的驱动程序常被设计成单例。 简介 单例模式是指整个应用中类只有一个对象实例的设计模式。它通常被用来创建对象,确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 它是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打...

    OnlyLing 评论0 收藏0
  • php设计模式单例模式

    摘要:单例模式概念作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。 单例模式概念 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。 单利模式三个要点 1.需要一个保存类的唯一实例的静态成员变量 private static $_...

    longmon 评论0 收藏0

发表评论

0条评论

shery

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<