一起学系列之单例模式:只推荐三种~
Posted 是Kerwin啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起学系列之单例模式:只推荐三种~相关的知识,希望对你有一定的参考价值。
意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
别名:单件模式
单例模式的诞生
【开发】:老大,为什么我保存配置信息,每次都和我预期的不一样啊,总是会覆盖?
【BOSS】:哈?我来看看。
【BOSS】:你每次使用的时候都会new一个新的配置对象吗?
【开发】:对啊,有什么问题?
【BOSS】:那肯定不对啊,像这种配置信息,全局只应该有一个,不然会互相影响!
HeadFirst 核心代码
饿汉型 (不推荐)
public class HazardousTypeSingleton {
private static final App APP = new App();
// 私有构造方法
private HazardousTypeSingleton () {}
// 类加载时已初始化,不会有多线程的问题
static App getInstance() {
System.out.println("APP - 饿汉型模式");
return APP;
}
}
❝名字由来:因为随着类加载而加载,显得很“急迫”,所以称之为饿汉型
❞
**评价:**这样的写法和全局变量没有本质的区别,不推荐
懒汉型 (不推荐)
public class LazyTypeSingleton {
private LazyTypeSingleton () {}
// 静态私用成员,没有初始化
private static App intance = null;
/***
* 直接加synchronized关键字
*/
synchronized static App getIntance () {
System.out.println("APP - 懒汉型模式");
if (null == intance) {
return new App();
}
return intance;
}
}
❝名字由来:调用时才加载,因此称之为懒汉型
❞
**评价:**这样写有延迟加载的功能,但是加了一个synchronized大锁,因此多线程环境下效率较低