php设计模式之单例.多例设计模式的应用分析

2014-02-23  来源:本站原创  分类:php技巧  人气:1 

本篇文章是对php设计模式中的单例与多例设计模式的应用进行了详细的分析介绍,需要的朋友参考下

单例(Singleton)模式和不常见的多例(Multiton)模式控制着应用程序中类的数量。如模式名称,单例只能实例化一次,只有一个对象,多例模式可以多次实例化。

基于Singleton的特性,我们经常用Singleton配置应用程序并定义应用程序中可能随时访问的变量。但有时并不推荐使用Singleton,因为它生成了一个全局状态且

该单一根对象没有封装任何系统功能。多数情况下,会使单元测试和调试变得困难。读者根据情况自行决定。
代码示例:

<?php
class SingletonExample{
    private function __construct(){}//防止直接实例化
  public static function getInstance(){ //不与任何对象有关联
 static $instance=null;    //调用此函数的所有代码共享该变量,不必要让其是类的静态变量
 if($instance==null){
   $instance=new SingletonExample();
     }
   return $instance;
  }
}
$obj1=SingletonExample::getInstance();
$obj2=SingletonExample::getInstance();
var_dump($obj1===$obj2);// true   是同一个实例
?>

Multiton与singleton相似,不同的是后者需要getInstance()函数传递关键值。
对于给定的关键值只会存在唯一的对象实例,如果有多个节点,每个节点拥有唯一的表识符,且各个节点在某单次执行(如cms里的节点)可能出现多次,那么就可以用Multiton模式实现这些节点啊,Multiton节省内存,并确保同一个对象的多个实例不发生冲突.
示例:


复制代码 代码如下:

 <?php
 class MultitonExample{
 private function __construct(){}//防止直接实例化

   public static function getInstance($key){
  static $instance=array();
  if(!array_key_exists($key,$instance)){
    $instance[$key]=new SingletonExample();
      }
    return $instance($key);
   }
 };
 ?>
相关文章
  • 设计模式--小单例有大秘密 2013-06-19

    设计模式--小单例有大秘密 http://blog.csdn.net/liushuijinger/article/details/9069801

  • php设计模式之单例.多例设计模式的应用分析 2014-02-23

    本篇文章是对php设计模式中的单例与多例设计模式的应用进行了详细的分析介绍,需要的朋友参考下 单例(Singleton)模式和不常见的多例(Multiton)模式控制着应用程序中类的数量.如模式名称,单例只能实例化一次,只有一个对象,多例模式可以多次实例化. 基于Singleton的特性,我们经常用Singleton配置应用程序并定义应用程序中可能随时访问的变量.但有时并不推荐使用Singleton,因为它生成了一个全局状态且 该单一根对象没有封装任何系统功能.多数情况下,会使单元测试和调试变得

  • objective-c设计模式之---单例 2013-07-22

    单例模式可以说是每个应用都有用到的一个模式,在iOS的世界里更是常见.例如我们的UIApplication sharedApplicaiton应用的就是单利模式, defaultManager和defaultCenter等也是常见的单利.这也是为什么人们经常把CoreData的实例变量放在UIApplication里面. 对单例有了更清楚的了解以后,我们可以让我们的代码更加清晰.比如,我们可以把放在AppDelegate里的关于CoreData的代码移植到其他的单例类里面. 在相关网络博客上面看

  • 浮动式表单标签(Label)的设计模式 2013-11-09

    这是一篇准备在一周中间的时间里发布的短文.其实每周会汇总到不少文章和资源一类,固定的周末更新基本就是一篇译文,总是有些,浪费的赶脚.那么平日略微有些碎片时间可以用的话,做些小更新也还不坏. 正在听滚石的Miss You,够骚的歌:Slash有句名言,好歌要么让你想fight,要么让你想fuck:必须的啊. 有点闹了,说正经的了.简短的一篇小文,介绍了一种有点意思的表单标签设计模式. 这里进入译文.表单当中比较常见的内联标签(inline label,将label直接置于输入框中的模式)容易引起不

  • 开博~~第一个阶段主要是写一些用PHP语言描述的设计模式用例 2012-06-26

    最近在看JAVA语言描述的<研磨设计模式>,写的很好.但在网上查了一下,设计模式的书籍以及用例多以JAVA语言描述为主,但现在主要是使用PHP语言进行日常的工作开发.书里的例子不错,就有用PHP语言重新写一下用例的打算,希望可以坚持下去.

  • 单例跟多例 2014-03-21

    单例多例需要搞明白两个问题: 1. 什么是单例多例: 2. 如何产生单例多例: 3. 为什么要用单例多例 4. 什么时候用单例,什么时候用多例: 1. 什么是单例多例: 所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 2. 如何产生单例多例: 在通用的SSH中,单例在spring中是默认的,如果要产生多例,则在配置文件的bean中添加scope="prototype"; 3

  • Hutool之单例池--Singleton 2014-06-28

    为什么会有这个类 平常我们使用单例不外乎两种方式: 在对象里加个静态方法getInstance()来获取.此方式可以参考 [转]线程安全的单例模式 这篇博客,可分为饿汉和饱汉模式. 通过Spring这类容器统一管理对象,用的时候去对象池中拿.Spring也可以通过配置决定懒汉或者饿汉模式 说实话我更倾向于第二种,但是Spring更对的的注入,而不是拿,于是我想做Singleton这个类,维护一个单例的池,用这个单例对象的时候直接来拿就可以,这里我用的懒汉模式.我只是想把单例的管理方式换一种思路,

  • JavaScript设计模式之工厂模式和构造器模式 2013-11-23

    这篇文章主要介绍了JavaScript设计模式之工厂模式和构造器模式,本文同时讲解了设计模式的类别如创建型设计模式.结构型设计模式.行为设计模式等内容,需要的朋友可以参考下 什么是模式 前阵子准备期末考试,劳神又伤身的,实在闲不得空来更新文章,今天和大家说说javascript中的设计模式. 首先呢,我们需要知道的是:模式是一种可复用的解决方案,而反模式呢就是针对某个问题的不良解决方案. js反模式常见例子 1.向setTimeout和setInterval传递字符串,而不是函数,这会触发eva

  • 基于php设计模式中单例模式的应用分析 2014-04-29

    本篇文章是对php设计模式中单例模式的应用进行了详细的分析介绍,需要的朋友参考下 单例模式:简单的说,一个对象只负责一个特定的任务. 单例类: 1.构造函数需要标记为private,单例类不能再其他类中实例化,只能被其自身实例化 2.拥有一个保存类的实例静态成员变量 3.拥有一个访问这个实例的公共的静态方法.[常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到此类是否已经被实例化] 注:需要创建__clone()方法防治对象被复制 作用: 1.php的应

  • 服务器端代理拥有事务的设计模式 2014-09-14

    当您在应用架构中用到命令模式(Command Pattern)或服务器端代理设计模式(Server Delegate Design pattern)时,本章描述的事务设计模式就比较适合了.在本模式中,服务器端代理组件,作为对服务器的远程接入点,拥有事务并负责对事务实施全面的管理.其他任何组件,包括客户端组件.领域服务组件.或是持久化组件都不负责管理事务,它们甚至不会察觉到它们正在使用到了事务. 命令模式是一种非常有用的设计模式,它解决了关于客户端事务管理以及EJB中的很多常见问题.这种设计模式背

  • 写给Python初学者的设计模式入门 2014-09-27

    有没有想过设计模式到底是什么?通过本文可以看到设计模式为什么这么重要,通过几个Python的示例展示为什么需要设计模式,以及如何使用. 设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码.反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板.设计模式不会绑定具体的编程语言.一个好的设计模式应该能够用大部分编程语言实现(如果做不到全部的话,具体取决于语言特性).最为重要的是,设计模

  • 手把手教学:详解Swift中的iOS设计模式 2014-09-28

    设计模式针对软件设计中的常见问题,提供了一些可复用的解决方案,它向开发者提供了模板,使其更易于写出逻辑清晰.可重用的代码.正确地使用设计模式可以降低代码之间的耦合度,轻松更新或替换项目中使用的组件. 说到设计模式,相信大家都不陌生,但是又有多少人知道它背后的真正含义?绝大多数程序员都知道设计模式十分重要,不过关于这个话题的文章却不是很多,开发者们在开发的时候有时也不太在意设计模式方面的内容. 设计模式针对软件设计中的常见问题,提供了一些可复用的解决方案,开发者可以通过这些模板写出易于理解且能够复

  • Python的设计模式编程入门指南 2014-10-25

    这篇文章主要介绍了Python的设计模式编程入门指南,设计模式主要指面对某些问题时需要用到的编程思想,需要的朋友可以参考下 有没有想过设计模式到底是什么?通过本文可以看到设计模式为什么这么重要,通过几个Python的示例展示为什么需要设计模式,以及如何使用. 设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码.反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板.设计模式不会绑定

  • php单态设计模式(单例模式)实例 2015-04-22

    这篇文章主要介绍了php单态设计模式(单例模式)实例,单态模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在,需要的朋友可以参考下 单态设计模式也叫单例模式: 1.单态设计模式含义: 单态模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在.作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 2.单台模式的三个关键点: ① 需要一个保存类的唯一实例

  • Cocos2d-x设计模式--二段构建模式 2014-09-15

    设计模式在程序设计中会经常用到,也许你从来没有留意过设计模式,其实你却一直在使用设计模式!cocos2dx中有不少的设计模式,所以从本篇博客开始探讨一下cocos2dx中的设计模式,看看引擎都使用了哪些设计模式,我们今后写代码要怎样使用某种设计模式. 大家最熟悉的是单例设计模式了吧,在cocos2dx中单例真是不少啊,我们的大导演不就是单例吗,单例设计模式我之前写过一篇博客,这里就不多说了.第二个设计模式是观察者模式,什么是观察者模式,如何实现观察者模式.就是被观察者含有一个数组,里边存放了所有

  • Java设计模式之组合模式(Composite模式)介绍 2014-03-19

    这篇文章主要介绍了Java设计模式之组合模式(Composite模式)介绍,Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性,需要的朋友可以参考下 Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树形结构图.组合体内这些对象都有共同接口,

  • CSS设计模式之三权分立模式篇 2014-04-06

    市面上我们常常会看到各种各样的设计模式书籍,Java设计模式.C#设计模式.Ruby设计模式等等.在众多的语言设计模式中我唯独找不到关于CSS设计模式的资料,即使在网上找到类似内容,细细一看之下才发觉是南辕北辙.经过浩瀚文章搜索发掘下依旧一无所获之后,直接导致了我萌生一股写一篇CSS设计模式的冲动,至此写下这篇文章,其中叙述如有不当之处,也恳请各位提出意见,分享出您宝贵的经验. 在写页面之中,width, margin, padding这三个CSS属性可以说是用到频率最高的几个属性之一.但根据我

  • 设计模式(Patterns) 2015-01-27

    ?A. 创建模式 设计模式之Factory(工厂模式) 使用工厂模式就象使用new一样频繁. 设计模式之Prototype(原型模式) 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 设计模式之Builder 汽车由车轮 方向盘发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder模式就是将这两种情况分开进行. 设计模式之Singleton(单态模式) 保证一个类只有一个实例,并提供一个访问它的全局访问点 ? B.结构模式 设计模式之Facade 可扩

  • 设计模式六大原则 2015-03-04

    设计模式六大原则(1):单一职责原则 定义:应该仅有一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障. 解决方案:遵循单一职责原则.分别建立两个类T1.T2,使T1完成职责P1功能,T2完成职责P2功能.这样,当修改类T1时,不会使职责P2发生故障风险:同理,当修改T2时,也不会使职责P1发生故障风险. 说到单一职责原则,很多人都会不屑一顾.因

  • 常见的PHP五种设计模式小结 2014-03-21

    设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 "四人帮"). 设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 "四人帮").所介绍的设计模式背后的核心概念非常简单.经过多年的软件开发实践,Gamm