Laravel中的设计模式(一)——单例模式

image

1、为什么要使用单例模式

有一些对象其实我们只需要一个。比如线程池(threadpool)、缓存(cache)、对话框、处理偏好设置和注册表(register)对象等。

比如说我们在系统运行时候,就需要加载一些配置和属性,这些配置和属性是一定存在了,又是公共的,同时需要在整个生命周期中都存在,所以只需要一份就行,这个时候如果需要我再需要的时候new一个,显然是浪费内存并且再赋值没什么意义,所以这个时候我们就需要单例模式。

2、怎么实现单例模式

  • 构造函数私有,不允许外部类实例化它
  • 类自己创建唯一的实例,并保存到全局属性当中
  • 提供公共的静态方法获取这个唯一的实例
  • 不允许克隆

3、PHP实现一下

<?php

class Singleton {
    private static $instance = null;

    public static function getInstance()
    {
        if (!isset(self::$instance)) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    private function __construct()
    {

    }

    private function __clone()
    {

    }
}

$demo = Singleton::getInstance();
$demo2 = Singleton::getInstance();
echo $demo===$demo2 ? 1 : 2;
echo "\n";

以上代码执行结果

1

4、在Laravel中的应用

在laravel bootstrap/app.php文件中,可以看到几行类似如下的代码。这就是在laravel的容器中注册了几个核心类的单例。当然你也可以自己在 app/Providers 中写一个单例的服务。

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 9,787评论 4 34
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,477评论 19 139
  • 1 场景问题# 1.1 读取配置文件的内容## 考虑这样一个应用,读取配置文件的内容。 很多应用项目,都有与应用相...
    七寸知架构阅读 11,779评论 12 68
  • 早加餐:面包晚水果:丰水梨 参考目标: 1份肉2份豆制品3份“新鲜”水果4份谷物/薯5份蔬菜,深绿色叶菜最好6杯水...
    静趣_儿童心理师阅读 1,501评论 0 0
  • 在微信上看到了关于这本书的介绍,于是在看豆上下载下来,下午在车上顺便看了一下。书里的内容对我的启迪很多,比...
    秋水长天碧阅读 1,092评论 0 0