关闭

PHP的设计模式——单例模式

标签: php设计模式实例
408人阅读 评论(0) 收藏 举报
分类:
单例模式的概念

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

单例模式的主要特点是“三私一公”:
  需要一个保存类的唯一实例的私有静态成员变量

 构造函数必须声明为私有的,防止外部程序new一个对象从而失去单例的意义

 克隆函数必须声明为私有的,防止对象被克隆

 必须提供一个访问这个实例的公共静态方法(通常命名为getInstance),从而返回唯一实例的一个引用。


1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;
2、拥有一个保存类的实例的静态成员变量
3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)
另外,需要创建__clone()方法防止对象被复制(克隆)
 

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

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

1、php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。
2、如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看ZF的FrontController部分。
3、在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo
 




1
0
查看评论

设计模式系列(一)单例模式

一、简单介绍 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。 《设计模式》书中对单例模式动机的介绍 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系...
  • robertcpp
  • robertcpp
  • 2016-06-05 11:00
  • 2284

单例模式——php单例模式的运用,用单例模式设计实现多例

不断学习不断进步的过程中,坚持用写作的方式记录学习成果真真是极好的习惯。最近笔者学习设计模式,正好有写博客的想法,于是第一篇博客就从设计模式中的一小个——单例模式讲起。     此文于php实现单例模式又略有些拓展,将使用单例模式的设计手法实现一个多例模式。应用场景如下:  ...
  • agangdi
  • agangdi
  • 2012-11-06 15:33
  • 2646

慕课网----大话PHP设计模式 三(三种基本设计模式-工厂模式,单例模式,注册树模式)

1)工厂模式: 工厂方法或者类生成对象,而不是代码中直接new 多用来生成对象 好处。如果很多个文件都使用了这个类的话,如果修改需要去每个文件下都进行修改,而使用工厂模式的话,则只用在类里面修改创建方法就好了。 很多其他高级的模式都是依赖于工厂模式的。 实现方式,就是在类里面之间实现new...
  • Rodgexue
  • Rodgexue
  • 2016-02-26 10:36
  • 3157

设计模式:单例模式(Singleton)

单例模式在23个设计模式中算得上是最简单的一个了,也行你会有异议,那就换成“最简单之一”,这样就严谨了很多。   单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。   适用性:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的,并...
  • u013256816
  • u013256816
  • 2016-03-23 21:37
  • 4954

C++设计模式[二]单例模式

接着就是单例模式;个人理解就是把创建方法改为私有,然后再内部实例化,禁止外部创建对象。 何为单例模式,在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数...
  • langb2014
  • langb2014
  • 2015-11-03 16:11
  • 1089

2.php的设计模式:单例模式

我都对自己有点无语了,又要开始写单例模式,都TM是套路。 不过话虽如此,套路照打。 声明 据说当前单例模式已被列入反模式的行列了,不过我还在用,因为需要。有需求就有市场。 他的一个好处是,确保需要全局唯一的变量,不重复生成,节约空间。比如:DB,我们仅仅需要在一次生命周期中,创建一个连接就好...
  • hel12he
  • hel12he
  • 2016-06-01 11:43
  • 602

单件模式(Singleton Pattern)(二):HeadFirst中的巧克力工厂的设计

以《HeadFirst设计模式》中的巧克力工厂为例,介绍单件模式的使用场景。 一、问题描述    现代化的巧克力工厂具备计算机控制的巧克力锅炉,锅炉做的事就是把巧克力和牛奶融在一起,然后送到下一个阶段,以制造成巧克力棒。Choc-O-Holic公司有一个巧克力...
  • jialinqiang
  • jialinqiang
  • 2013-05-11 09:24
  • 2430

设计模式(创建型)之单例模式(Singleton Pattern)

单例模式可能是23种设计模式中最简单的。应用也非常广泛,譬如Android中的数据库访问等操作都可以运用单例模式。核心概念: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。
  • yanbober
  • yanbober
  • 2015-04-27 16:50
  • 2684

C#设计模式(1)——单例模式(讲解非常清楚)

一、引言 最近在学设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二同时可以给一些初学设计模式的朋友一些参考。首先我介绍的是设计模式中比较...
  • u013472838
  • u013472838
  • 2015-04-02 15:01
  • 712

【php】利用单例模式设计数据库连接Model类

之前在《【php】利用php的构造函数与析构函数编写Mysql数据库查询类》(点击打开链接)写过的Mysql数据库查询类还不够完美,利用《【Java】单例模式》(点击打开链接)介绍的思想可以将这个数据库链接类搞成单例,不会因为多个用户访问网站就创建一个数据库查询实例,拖慢整个网站的速度,让网站的数据...
  • yongh701
  • yongh701
  • 2015-10-16 19:52
  • 1780
    个人资料
    • 访问:127733次
    • 积分:2117
    • 等级:
    • 排名:千里之外
    • 原创:94篇
    • 转载:1篇
    • 译文:1篇
    • 评论:49条
    最新评论