当前位置:首页 > PHP教程 > php应用 > 列表

什么是单例模式?

发布:smiling 来源: PHP粉丝网  添加日期:2020-02-17 18:10:13 浏览: 评论:0 

单例模式(Singleton pattern)是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式的模式动机。

例如我们在php的开发过程中我们创建了一个db类(数据库操作类),那么我们希望再一个php文件中一个数据库只被连接一次而一个php文件中也只需要一个数据库对象!因为多次连接数据库会大大降低php的执行效率。也会带来极大的系统开销!

使用单例模式来封装你的数据库吧

  1. <?php 
  2.  
  3. class db 
  4.  
  5. { 
  6.  
  7. //使用一个静态变量记录db对象初始化时为null 
  8.  
  9. public static $db = null; 
  10.  
  11. /* 私有构造函数是类无法完成外部的调用 
  12.  
  13. * 意味着您将无法使用 $xx = new db(); 
  14.  
  15. */ 
  16.  
  17. private function __construct(){ 
  18.  
  19. echo '连接数据库....'; 
  20.  
  21. } 
  22.  
  23. /*  
  24.  
  25. * 使用静态方法去获取数据对象 
  26.  
  27. * 获取时先判断db对象是否已经存在,如果存在则直接返回db对象反正则创建这个对象 
  28.  
  29. */ 
  30.  
  31. public static function getInstance(){ 
  32.  
  33. if(self::$db == null){ 
  34.  
  35. self::$db = new db(); 
  36.  
  37. } 
  38.  
  39. return self::$db; 
  40.  
  41. } 
  42.  
  43. public function query($sql){ 
  44.  
  45. echo '执行sql命令'; 
  46.  
  47. } 
  48.  
  49. public function __destruct(){ 
  50.  
  51. echo '关闭数据库连接....'; 
  52.  
  53. } 
  54.  
  55. } 
  56.  
  57. $db = db::getInstance(); 
  58.  
  59. $db1 = db::getInstance(); 
  60.  
  61. $db->query('test'); 
  62.  
  63. $db2 = db::getInstance(); 

输出 : 连接数据库....执行sql命令关闭数据库连接....

可以看到不论我们获取多少次db对象,虽然他们名称不同,但都代表着同一个对象!这样就实现单例模式!

Tags: 什么是单例模式

分享到: