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

时间:2021-05-02

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

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

对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或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)

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章