前言:
说完了工厂模式,按我们的《php设计模式(7)前言》中的规划,这次我们来讨论单例模式。
内容概要:
1、什么是单例模式
2、为什么要使用单例模式
3、什么情况下使用单利模式
4、示例代码
一、什么是单例模式
网上的官方的定义就不抄了,单例模式是常用的一种设计模式,他的核心就是做一个只能有一个实例的类。就是说某一个类,只能实例化一个对象,仅提供一个类函数供外部访问。这个类也叫单例类。
说白了:单例模式就是原先计划生育的一胎政策(类是父母,实例化的对象是独生子女)。
二、为什么要使用单例模式
1、省内存,只有一个实例对象,当然省了啊。
2、灵活,单例类内部实例对象,单例类里修改一下实例化的过程和参数,外部的那些类正常使用,他们根本不知道,当然也没必要知道。
3、就这么一个孩子,不会出现争财产的情况
三、什么情况下使用单例模式
很容易知道,我们某一个类只能有一个实例对象的时候用单例模式。常用的场景是数据库类。其他应用场景是否能使用单例模式,看你的业务需求吧,只要要求独生子女(对象),都是可以使用的。
另外提一点,单例模式和工厂模式是可以结合使用的。
本着不偷懒的精神,献上UML图
四、示例代码
相比较java语言(有七八种写法:懒汉、恶汉、枚举等),php的单例模式比较简单,就一种写法。
屡起袖子,我们一起分析怎么写出一个只能有一个实例(对象)的单例类。
1、我们要创建单例只能有一个对象,那说明不能让别的类来new创建了,不然,就会产生好多实例对象了。so,这个单例类里只能在自己类的内部实例化类。
2、别的类不能new这个类,因此,这个单例类里的构造方法(__construct())不能是共有属性的了,应该使用private属性
3、还有外部类不能new这个单例类,那总的提供方式供外部类使用吧,很自然,单例类中采用静态方法对外提供使用。
4、当然,需要创建一个内部的变量存储对象
ok,估计你应该知道怎么写单例类了吧?那我的献丑写一段给大伙看看。