zoukankan      html  css  js  c++  java
  • 设计模式之单例模式(Singleton Pattern)

    单例模式是最简单的设计模式之一。属于创建型模式,它提供了一种创建对象的最佳方式。使应用中只存在一个对象的实例,并且使这个单实例负责所有对该对象的调用。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
    注意:
    1.单例类只能有一个实例。
    2.单例类必须自己创建自己的唯一实例。
    3.单例类必须给所有其他对象提供这一实例。

     1 class Singleton
     2 {
     3     //创建静态私有的变量保存该类对象
     4     private static $instance;
     5     private $config;
     6     private function __construct($config)
     7     {
     8         $this->config = $config;
     9     }
    10     private function __clone()
    11     {
    12         // TODO: Implement __clone() method.
    13     }
    14 
    15     public static function getInstance($config): Singleton
    16     {
    17         if (!self::$instance instanceof self){
    18             self::$instance = new self($config);
    19         }
    20         return self::$instance;
    21     }
    22     public function get(){
    23         echo $this->config,PHP_EOL;
    24     }
    25 }
    26 $d1 = Singleton::getInstance(1);
    27 $d1->get();
    28 $d2 = Singleton::getInstance(4);
    29 $d2->get();

    PHP单例模式下是否有线程安全问题?

    学习自https://blog.csdn.net/second24/article/details/77606422  感谢博主
    PHP语言是一种解释型脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说PHP在语言级别上没办法让对象常驻内存(非cli模式),这和asp、Java等编译型是不同的,比如在Java中单例会一直存在整个应用程序的生命周期里,变量是跨页面级的,真正可以做到这个实例在应用程序生命周期中的唯一性。然而在PHP中,所有变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空。PHP单例模式针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的。
    所以PHP中单例模式一般不会有线程安全问题。

  • 相关阅读:
    git 在局域网新建远程库及本地开发常用命令
    sql server 常用操作
    LNMPA遇到504 Gateway time-out错误的解决方法
    安全cookie登录状态设计方案
    linux 启动ftp服务,sftp服务
    最详细的cookie和浏览隐私之间的关系
    IE无法获得cookie,ie不支持cookie的解决办法,火狐支持
    关于mysql联合索引
    常用Mysql命令
    常用Linux命令、包括vi 、svn
  • 原文地址:https://www.cnblogs.com/caohongchang/p/11487230.html
Copyright © 2011-2022 走看看