php单例模式之“三私一公”

单例模式的概念

单例模式是指整个应用中某个类只有一个对象实例的设计模式。具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

单例模式的特点

单例模式的主要特点是“三私一公”:
需要一个保存类的唯一实例的私有静态成员变量
构造函数必须声明为私有的,防止外部程序new一个对象从而失去单例的意义
克隆函数必须声明为私有的,防止对象被克隆
必须提供一个访问这个实例的公共静态方法(通常命名为getInstance),从而返回唯一实例的一个引用。

使用单例模式的原因及场景

在PHP的大多数应用中都会存在大量的数据库操作,如果不用单例模式,那每次都要new操作,但是每次new都会消耗大量的系统资源和内存资源,而且每次打开和关闭数据库都是对数据库的一种极大考验和浪费。所以单例模式经常用在数据库操作类中。
同样,如果系统中需要有一个类来全局控制某些配置信息,那使用单例模式可以很方便的实现。

Db类中的体现

<?php
 class Db{
 const DB_HOST=‘localhost‘;
 const DB_NAME=‘‘;
 const DB_USER=‘‘;
 const DB_PWD=‘‘;
 private $_db;
 //保存实例的私有静态变量
 private static $_instance;
 //构造函数和克隆函数都声明为私有的
 private function __construct(){
  //$this->_db=mysql_connect();
 }
 private function __clone(){
  //实现
 }
 //访问实例的公共静态方法
 public static function getInstance(){
  if(!(self::$_instance instanceof self)){
  self::$_instance=new self();
  }
  //或者
  if(self::$_instance===null){
  self::$_instance=new Db();
  }
  return self::$_instance;
 }
 public function fetchAll(){
  //实现
 }
 public function fetchRow(){
  //实现
 }
 }
 //类外部获取实例的引用
 $db=Db::getInstance();
?>

原文地址:https://www.cnblogs.com/xiaogou/p/9191004.html

时间: 2024-10-11 16:29:19

php单例模式之“三私一公”的相关文章

PHP单例模式的三私一公

单例模式:即一个类只被实例化一次,当其他人对其再次实例化时,便返回第一次实例化的对象.这种模式可以极大地节约资源.典型应用于数据库类的实例化. 以实例化一个Mysql数据库类为例: 要实现一个类只实例化一次,就必须堵住其他实例化的入口. 1.实例化类时,会自动调用类的构造方法,因为将构造方法设置为private属性,限制为只能在类内部实例化 private function __construct(){ } 2.定义一个静态方法,在类内部实例化对象.实例化前先判断该类是否已被实例化了,若已被实例

设计模式之单例模式(三种实现方式)

一.单例模式要点 1.单例,顾名思义,某个类仅仅能有一个实例. 2.它必须自行创建这个唯一的实例. 3.它必须自行向整个系统提供这个实例. 二.单例模式的三种实现 1.饿汉式单例类(类载入时就初始化) 代码实现 public class EagerSingleton { //私有的类成员常量 private static final EagerSingleton SINGLETON=new EagerSingleton(); //私有的默认构造方法.此类不能被继承 private EagerSi

张小二求职记之 单例模式(三)之决战多线程

M:上回说的多线程的单例模式会了? z;略懂 M:写一个吧 package 单例模式; public class Singleton { private static Singleton instance=null; private Singleton() { System.out.println("单例构造函数"); } public static Singleton getInstance() { if(instance==null) { instance=new Singleto

单例模式的三种实现方式

一.单例模式的三种实现方式 1. 什么是单例模式 基于某种方法,实例化多次,得到同一个实例/对象 2. 为什么用单例模式 实例化多次,得到的对象属性内容都一样时,应该将这些对象指向同一个内存,即同一个实例,来节省内存空间 1. 实现单例模式方式一:类内部定义类方法实现 实现方法:类中定义了一个类方法 # 未单例模式前 import setting class Mysql: def __init__(self,ip,port): self.ip=ip self.port=port @classme

RSA加解密 私钥加密公钥解密 私加公解 &amp;&amp; C++ 调用openssl库 的代码实例

前提:秘钥长度=1024 ============================================== 对一片(117字节)明文加密  私加 ============================================== // 私钥加密 std::string rsa_pri_encrypt(const std::string &clearText, std::string &pubKey) { std::string strRet; BIO *keybio

python实现单例模式的三种方式及相关知识解释

python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singleton实现的四种方法都是python的重要特征,反过来也刚好是几种特征的最佳实现.(比如你平常开发中很难遇到几个需要写元类的地方)如果不能随手写出某种实现,说明你对于那种实现的概念还没有完全掌握.最近场通过写装饰器模式的singleton来复习装饰器概念. 1. module实现 #模块实现 from

单例模式的三种实现 以及各自的优缺点

单例模式:单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有三种:懒汉式单例,饿汉式单例,登记式单例. 1.懒汉式单例 public class Singleton { private static Singleton singleton; private Singleton() {} //此类不能被实例化 public static synchronized Singleton getInstance() {

设计模式:单例模式的三种创建方式及其各自的优缺点

单例模式: 确保一个类仅仅有一个实例,并提供全局訪问点.在Java中实现单例模式须要私有的构造器,一个静态方法和一个静态变量.确定在性能和资源上 的限制,怎样选择适当的方案来实现单例,以解决多线程的问题. 假设使用多个类载入器,可能导致单例失效产生多个实例.双重检查加锁不适用于1.4及更早版本号的java. 方式1: package singleton; /** * 同步getInstance()方法: * 有点:保证线程安全. * 缺点:性能大大下降 * @author Arvon * */

java单例模式的三种实现(线程安全)

直接上代码(代码注释比较完整): 第一种: package pattern.singleton.doublecheck; public class Singleton {  // 私有化默认构造方法,防止外部生成此实例 private Singleton(){}  // 声明此单一实例 // volatile: 能够及时通知其他线程,更新其线程缓存数据 private volatile static Singleton INSTANCE;  // 向外提供此单一实例 public static