意图
保证一个类仅有一个实例,并提供访问它的全局访问点
适用性
- 当类只能有一个实例,而且客户可以从一个众所周知的访问点访问它
- 当这个唯一的实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时
我的理解:
单例模式主要用于只能创建一个对象实例的场景,如db类,文件类,cache类这些,防止过多的连接造成资源的浪费。
结构
代码示例
|
|
明显特征
1公(getInstance)4私(object,__construct,__clone,__wakeup)
- 定义了一个public类型的用来返回对象的方法,只能通过该方法生成对象
- 定义了一个人private的私有属性,代表具体的类对象,只能通过public方法获得
- 非public的构造函数,不可直接new对象,如果__construct是共有的,就意味着可以使用new创建对象,这样会产生不同的对象
- 为了防止使用clone复制对象,使用unserialize反序列化得到对象,需要将clone和wakeup对象重新定义为两个什么都不做的私有方法。
参考文献
1.单例模式
2.Php中的单例模式面面观