php设计模式之单例模式

单例模式

単例模式就是某个类只有一个实例,自行实例化并向整个系统提供这个实例

単例模式的实现:
1:私有化一个属性用于存放唯一的实例
2:私有化构造方法
3:私有化克隆方法,用来创建并只允许创建一个实例
4:公有化静态方法,用于向系统提供这个唯一实例
#输出
object(Singleton)#1 (0) {
}
object(Singleton)#1 (0) {
}
object(Singleton)#1 (0) {
}

因为静态方法可以在全局范围内被访问,当我们需要一个单例模式的对象时,只需调用getInstance方法,获取先前实例化的对象,无需重新实例化。

因为静态方法可以在全局范围内被访问,当我们需要一个单例模式的对象时,只需调用getInstance方法,获取先前实例化的对象,无需重新实例化。

优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。

缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

使用场景: 1、要求生产唯一序列号。 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

注意事项:getInstance() 方法中需要使用同步锁 synchronized 防止多线程同时进入造成 instance 被多次实例化

上一篇 php设计模式之工厂模式
下一篇 php设计模式之注册树模式

你可能感兴趣的:(php设计模式之单例模式)