首页 > 编程 > Php > 正文

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

2023-05-10 19:33:04
字体:
来源:转载
供稿:网友

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

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表