zoukankan      html  css  js  c++  java
  • 设计模式之单例模式(php实现)

      github地址:https://github.com/ZQCard/design_pattern

    单例模式:顾名思义就就是创建单个实例的模式。

    优点:保证一个类仅有一个实例,并提供一个访问它的全局访问点。避免使用的类频繁地创建与销毁以致于造成不必要的消耗。

    缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

    应用实例:数据库的连接、web计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来等等

    由于PHP是单线程,不用考虑多线程造成不完美的单例.

    (1)Singleton.class.php

    <?php

    namespace Singleton;

    class Singleton
    {
    public static $db = null;
    private function __construct()
    {
    $dsn = 'mysql:host=localhost;dbname=blog';
    $username = 'root';
    $passwd = 'zhouqi445864742';
    self::$db = new PDO($dsn, $username, $passwd);
    }

    public static function getInstance()
    {
    if (self::$db == null){
    self::$db = new Singleton();
    }
    return self::$db;
    }
    }

    (2)客户端

    <?php
    spl_autoload_register(function ($className){
        $className = str_replace('\','/',$className);
        include $className.".class.php";
    });
    
    use SingletonSingleton;
    $db = Singleton::getInstance();
    $db2 = Singleton::getInstance();
    echo $db === $db2 ? '单例':'失败';
  • 相关阅读:
    [leetcode] 18. 四数之和
    [leetcode] 17. 电话号码的字母组合
    [leetcode] 16. 最接近的三数之和
    [leetcode] 15. 三数之和
    [leetcode] 14. 最长公共前缀
    [leetcode] 13. 罗马数字转整数
    [leetcode] 12. 整数转罗马数字
    [leetcode] 11.盛最多水的容器
    分布式系统中的缓存——笔记整理
    图解HTTP
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9107580.html
Copyright © 2011-2022 走看看