0
点赞
收藏
分享

微信扫一扫

PHP 设计模式之单例模式


PHP 设计模式之单例模式_开发语言

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. ​​*/​​
16. ​​private function __construct(){}​​
17.
18. ​​/**​​
19. ​​* 类的入口​​
20. ​​* 用于获取类的实例​​
21. ​​*/​​
22. ​​public static function getInstance()​​
23. ​​{​​
24. ​​if (self::$obj instanceof self) {​​
25. ​​return self::$obj;​​
26. ​​} else {​​
27. ​​self::$obj = new self;​​
28. ​​return self::$obj;​​
29. ​​}​​
30. ​​}​​
31.
32. ​​/**​​
33. ​​* 私有化克隆方法​​
34. ​​* 禁止类的实例在外部被克隆​​
35. ​​*/​​
36. ​​private function __clone(){}​​
37. ​​}​​

举报

相关推荐

0 条评论