PHP 设计模式之单例模式

PHP 设计模式之单例模式_第1张图片

1. 单例模式


单例:一个类最多只能有一个对象,目的:保护资源的唯一性

单例模式(Singleton):通过代码实现单例的设计思路、一个类最多只能产生一个对象的设计思想

2. 三私一公


单例模式设计规范:三私一公

  • 私有化构造方法: 禁止在类外无限实例化对象
  • 私有化克隆方法: 禁止对象无限克隆对象
  • 私有化静态属性: 保存类内部实例化得到的对象
  • 公有化静态方法: 允许外部通过调用类内部方法获取对象

a. 私有化构造方法

 
  
  1. 对象的产生方式之一是通过实例化类,而在类外部实例化是一种不可控行为,所以应该禁止类在外部被实例化
  2. 类在外部实例化本质上是在类外部调用了构造方法,
  3. 私有化构造方法可使其不能在类外部掉用构造方法,也就是实现了禁止类在外部被实例化

b. 公有静态方法

 
  
  1. 私有化构造方法只是不能在类外部实例化类,但是可以在类里面实例化,没有对象,还想要访问类中的方法,所以需要定义一个公有静态方法,用于获取类的实例(对象)

c. 私有化静态属性

 
  
  1. 提供公有静态方法后,无限调用静态方法依然可以得到多个对象。
  2. 要想只返回一个,则可将第一次产生的对象保存起来,以后如果要获取对象直接返回第一次产生的对象

d. 私有化克隆方法

 
  
  1. 在类外部可以通过克隆对象来产生新的对象,私有化克隆方法可实现禁止类在外部被克隆

3. 单例模式设计类


 
  
  1. /**
  2. * 单例模式设计
  3. */
  4. class Singleton
  5. {
  6. /**
  7. * 私有静态属性
  8. * 保存产生的对象
  9. */
  10. private static $obj;
  11. /**
  12. * 私有化构造方法
  13. * 禁止类在外部实例化
  14. */
  15. private function __construct(){}
  16. /**
  17. * 类的入口
  18. * 用于获取类的实例
  19. */
  20. public static function getInstance()
  21. {
  22. if (self::$obj instanceof self) {
  23. return self::$obj;
  24. } else {
  25. self::$obj = new self;
  26. return self::$obj;
  27. }
  28. }
  29. /**
  30. * 私有化克隆方法
  31. * 禁止类的实例在外部被克隆
  32. */
  33. private function __clone(){}
  34. }

 

你可能感兴趣的:(编程笔记,单例模式,java,开发语言)