博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【php实现设计模式】之单例模式
阅读量:7175 次
发布时间:2019-06-29

本文共 1855 字,大约阅读时间需要 6 分钟。

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

什么是单例模式

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

有什么作用

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下是有效的

转载地址:http://dzdzm.baihongyu.com/

你可能感兴趣的文章
linux驱动current,引用当前进程,及task_struct
查看>>
第二节 16命名空间
查看>>
JSP/Servlet(三)
查看>>
DelayQueue在容错时的使用
查看>>
屏蔽silverlight 4应用中的右键菜单
查看>>
NAT原理简介
查看>>
内联表达式
查看>>
手动添加数据源时DataGridViewComboBoxCell值出问题解决方法
查看>>
函数声明优先于变量
查看>>
HDU-1003 Max Sum 动态规划
查看>>
Silverlight.XNA(C#)跨平台3D游戏研发手记:(九)3D 骨骼动画
查看>>
在.NET外散步之我爱贪吃蛇Python -常见语句(神奇的else)
查看>>
Known Issues
查看>>
文件相关操作工具类——FileUtils.java
查看>>
原:视频直播技术中的参考技术网页
查看>>
linq教程
查看>>
requests从api中获取数据并存放到mysql中
查看>>
23种设计模式之组合模式(Composite)
查看>>
button按钮点击不刷新(前端交流学习:452892873)
查看>>
安卓 使用Gradle生成正式签名apk文件
查看>>