首页 > 作文

PHP设计模式之单例模式入门与应用详解

更新时间:2023-04-08 04:34:23 阅读: 评论:0

本文实例讲述了php设计模式之单例模式入门与应用。分享给大家供大家参考,具体如下:

单例模式,是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例,即一个类只有一个对象实例。通俗来讲就是通过提供自身共享实例的访问,单例设计模式用于限制特定对象只能被创建一次,来看下这个单例带风的诗句模式的要点:

1.一个类只能有一个对象;

2.必须是自行创建这个类的对象;

3,要想整个系统提供这一个对象;

从具体实现的角度来说,可以按着下面这三点来理解:

一是单例模式的类只提供私有的构造函数,

二是类定义中含有一个该类的静态私有对象,

三是该类提供了一个静态文章标题的作用的公有的函数用于创建或获取它本身的静态私有对象。

最主要的就是还要有一个private的clone方法,防止克隆,得记得哈。

优点如下:

一、实例控制

单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。

二、灵活性

因为类控制了实例化过程,所以类可以灵活更改实例化过程。

缺点如下:

一、开销

虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。

二、可能的开发混淆

使用单例对象(尤其在类库技能专长中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。

三、对象生存期

不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.net framework的语言自我总结怎么写),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 c++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。

来看下咱写的案例 :

class test{  static private $instance;  private $age;  private $name;  private function __construct($name,$age)  {    $this->name = $name;    $this->age = $age;    echo "construct".php_eol;  }  private function __clone()  {    // todo: implement __clone() method.  }  static public function t_name($name,$age)  {    if (!lf::$instance instanceof lf) {       lf::$instance = new lf($name,$age);     }     return lf::$instance;  }  public function get_name()  {    echo $this -> name.php_eol;    echo $this -> age.php_eol;  }}$object_1 = test::t_name("cuijinpeng","26");$object_1->get_name();echo "<br>";$object_2 = test::t_name("luyaran","27");$object_2->get_name();

运行结果:

construct cuijinpeng 26
cuijinpeng 26

从上述实例中,我们可以看出,$object_1创建对象后,参数是”cuijinpeng”,”26″,但是$object_2并没有创建对象,而是直接使用$instance保存的唯一对象,所以输出的参数并没有变为”luyaran”,”27&#考研什么时候8243;。

好啦,本次记录就到这里了。

本文发布于:2023-04-08 04:34:22,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/de22d6633130215e4a4d87b9ba625310.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP设计模式之单例模式入门与应用详解.doc

本文 PDF 下载地址:PHP设计模式之单例模式入门与应用详解.pdf

标签:对象   实例   模式   静态
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图