PHP设计模式(四)单例模式(Singleton)

1、什么是单例设计模式

单例模式,也叫单子模式,是一种经常使用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。php

2、单例模式的技巧

  1. 利用$_instance私有变量来保存类的惟一实例化对象;
  2. 设计一个getInstance对外公开的函数,能够获取类惟一实例;
  3. 防止用户用new实例化,和克隆,构造两个__construct、__clone私有函数;

3、单例模式的应用场景

  数据库设计,咱们发送一次请求,可能会须要访问不一样的表,那么若是每次访问都 new 一个实例,那必然会形成资源的浪费,因此使用单例模式,能够很好的节省资源。程序员

单例类
class DataBase
{
    /**
     * 静态成品变量,保存全局实例
     */
    private static $_instance = null;

    /**
     *  测试变量,存储日志信息
     */
    private static $_msg = null;

    /**
     * 私有构造方法,防止外界实例化对象
     */
    private function __construct()
    {
        $connect = "链接数据库操做";
    }

    /**
     * 私有化克隆方法,防止外键克隆对象
     */
    private function __clone()
    {
    }

    /**
     * 静态方法,外界获取实例的惟一接口
     * @return Object 返回对象惟一实例
     */
    public static function getInstance()
    {
        if (!self::$_instance){
            self::$_instance = new DataBase();
            self::$_msg = "这是一个新对象" . "<br>";
        }else{
            self::$_msg = "这个是一个旧的对象" . "<br>";
        }

        return self::$_instance;
    }

    public function log()
    {
        echo self::$_msg;
    }
}
客户端测试代码
$dbA = DataBase::getInstance();
    $dbA->log();

    $dbB = DataBase::getInstance();
    $dbB->log();

    $dbC = DataBase::getInstance();
    $dbC->log();
输出结果:

这是一个新对象数据库

这个是一个旧的对象segmentfault

这个是一个旧的对象设计模式

“对象”?,程序员怎么可能有对象!~数据库设计

参考

系列源地址

WilburXu/design_pattern函数

系列目录

  1. PHP 设计模式概述
  2. PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)
  3. PHP设计模式(二)工厂方法模式(Factory Method)
  4. PHP设计模式(三)抽象工厂模式(Abstract Factory)
  5. PHP设计模式(四)单例模式(Singleton)
相关文章
相关标签/搜索