首 页IT知识库翔宇问吧收藏本站
当前位置:翔宇亭IT乐园IT知识库WEBPHP

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

减小字体 增大字体 作者:佚名  来源:转载整理  发布时间:2016-02-01 13:33:10

单例模式,即某个类只有一个实例。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。

对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。

显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

在PHP中实现单例模式的源代码如下一种形式:

1 <?php
2 /**
3 * 单例模式
4 *
5 * 保证一个类仅有一个实例,并提供一个访问它的全局访问点
6 *
7 */
8 class Singleton
9 {
10 staticprivate$_instance=null;
11
12 privatefunction __construct()
13 {
14 }
15
16 staticpublicfunction getInstance()
17 {
18 if(is_null(self::$_instance)) {
19 self::$_instance=new Singleton();
20 }
21 return self::$_instance;
22 }
23
24 publicfunction display()
25 {
26 echo"it is a singlton class function";
27 }
28 }
29
30 // $obj = new Singleton(); // 声明不能成功
31 $obj= Singleton::getInstance();
32 var_dump($obj);
33 $obj->display();
34
35 $obj1= Singleton::getInstance();
36 var_dump(($obj===$obj1));

 以上内容来源于百度百科和cnblog.com(http://www.cnblogs.com/bluefrog/archive/2011/06/15/2081789.html)

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 1分

内 容:

            请注意用语文明且合法,不要发布带有攻击性、侮辱性的言论,谢谢合作!

         通知管理员 验证码:

关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图 | 用户守则 | 联系我们 |
本站大多数内容来自互联网或网站会员发布,如有侵权,请来信告之,谢谢!
Copyright © 2007-2017 biye5u.com. All Rights Reserved.
网站备案号:黑ICP备13005378号-3