zoukankan      html  css  js  c++  java
  • 设计模式-单例模式

    单例模式(Singleton Pattern):
    单例模式是实现一个类只有一个实例,而且往往是整个系统中只有一个该实例。

    单例模式也是一个创造型的模式

    在实例化数据库,缓存,日志中比较常用

    那么它是怎么做到的呢
    1:要确保一个类只有一个实例,我们用私有静态成员变量来保存这个实例
    private static $_instance;

    2:构造函数和克隆函数必须声明为私有,防止外部程序new类

    // 私有化构造方法,防止new实例
    private function __construct()
    {
    
    }
    // 覆盖__clone()方法,禁止克隆
    private function __clone()
    {
    }

    3:必须要提供一个能访问这个存私有静态成员变量的公共函数,返回唯一实例的引用

    // 用于返回对象实例的公共静态方法
    public static function getInstance()
    {
      // 判断当前实例是否已经创建
      if (!(self::$_instance instanceof self) ) {
        // 如果没有,则创建
        self::$_instance = new self();
      }
      // 最终返回实例
      return self::$_instance;
    }


    来写一个例子:

    <?php
    
    /**
    * Class DB 数据库操作类
    */
    class Db
    {
      private $_db;
      private static $_instance;
    
      // 私有化构造方法,防止外部new实例
      private function __construct()
      {
         // 这里主要用于连接数据库,细节此处省略
         $this->_db = this->connect_db(); 
      }
    
    
      private function connect_db()
      {
    
      }
      // 覆盖__clone()方法,禁止克隆
      private function __clone() 
      {
    
      }
    
      // 返回对象实例
      public static function getInstance()
      {
        // 判断是否存在对象实例
        if(! (self::$_instance instanceof self) ) {
           // 不存在则创建保存
          self::$_instance = new self();
        }
          // 返回对象实例
        return self::$_instance;
      }
    
      // 其他方法
      public function query(...)
      {
    
      }
    
      // 其他方法
      public function insert(...)
      {
    
      }
    }

    在单例模式的实现过程中,需要注意如下三点:
    单例类的构造函数为私有;
    提供一个自身的静态私有成员变量;
    提供一个公有的静态工厂方法

  • 相关阅读:
    获取路径的方式
    读取XML文件(XmlNode和XmlElement区别)
    jQuery 选择器大全
    JS中Null与Undefined的区别
    浅谈JS中的!=、== 、!==、===的用法和区别
    sql面试 查找每个班级的前5名学生(取分类数据的前几条数据)
    C#动态方法调用
    C# 匿名对象(匿名类型)、var、动态类型 dynamic——实用之:过滤类属性、字段实用dynamic
    前言2
    2019-1-17 前言 C#高级编程(第11版)
  • 原文地址:https://www.cnblogs.com/jiujuan/p/10296212.html
Copyright © 2011-2022 走看看