[关闭]
@a5635268 2016-02-29T16:23:57.000000Z 字数 793 阅读 1118

【PHP的设计模式专题(2)】单例模式

PHP 设计模式


意图

保证一个类仅有一个实例,并且提供一个访问它的全局访问点

结构

Singleton.jpg-4.8kB

主要角色

Singleton定义一个getInstance操作,允许客户访问它的唯一实例。getInstance是一个类方法。负责创建它的唯一的实例。

使用场景

一个需要重复操作的对象,如数据库链接对象,在一个访问生命周期中,需要多处使用,甚至要使用在循环中;

代码示例

Example1

  1. <?php
  2. /**
  3. * 懒汉式单例类。因为PHP不支持在类定义时给类的成员变量赋予非基本类型的值。如表达式,new操作等等,所以不支持
  4. */
  5. class Singleton {
  6. /**
  7. * 静态成品变量 保存全局实例
  8. */
  9. private static $_instance = NULL;
  10. /**
  11. * 私有化默认构造方法,保证外界无法直接实例化
  12. */
  13. private function __construct() {
  14. }
  15. /**
  16. * 静态工厂方法,返还此类的唯一实例
  17. */
  18. public static function getInstance() {
  19. if (is_null(self::$_instance)) {
  20. self::$_instance = new Singleton();
  21. }
  22. return self::$_instance;
  23. }
  24. /**
  25. * 防止用户克隆实例
  26. */
  27. public function __clone(){
  28. die('Clone is not allowed.' . E_USER_ERROR);
  29. }
  30. /**
  31. * 测试用方法
  32. */
  33. public function test() {
  34. echo 'Singleton Test!';
  35. }
  36. }
  37. /**
  38. * 客户端
  39. */
  40. class Client {
  41. /**
  42. * Main program.
  43. */
  44. public static function main() {
  45. $instance = Singleton::getInstance();
  46. $instance->test();
  47. }
  48. }
  49. Client::main();
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注