在单件模式一章中,Head Fist一书主要是通过“巧克力工厂”一例去讲解优化代码。
本例粗略介绍:现代化巧克力工厂具备计算机控制的巧克力锅炉。锅炉做的事,就是把巧克力和牛奶融在一起,然后送到下一个阶段,以制造成巧克力棒。若该公司有且仅有一个锅炉,或者说该公司只能运行一个锅炉,那么就需要控制程序只能有一个锅炉实例,另外,在锅炉运行中还要考虑多线程问题。
本例主要需要解决的问题:在这个例子中主要需要解决的是由单例带来的多线程安全问题。
单件模式定义:确保一个类只有一个实例,并提供一个全局访问点。
单件模式的实现:单件模式实现主要有三点:一个私有静态变量、一个私有构造器、一个公有静态实例获取方法。
为了处理多线程安全问题,单件模式主要有两种具体实现方式:通常称其为懒汉式与饿汉式。
饿汉式:为毛称其为饿汉式呢?(个人理解,不代表官方想法)因为他饿,所以他积极。“饿”取得就是积极的意思。积极的去创建实例。它会在类加载时就创建单件实例。
代码如下:
public class Singleton {
private static Singleton uniqueInstance = new Singleton();//用static关键字保证在类加载时就初始化对象
private Singleton(){
}
public static Singleton getInstance(){
return uniqueInstance;
}
}
代码如下:
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getInstance() {
if(uniqueInstance == null) {
synchronized(Singleton.class) {
if(uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
单件模式的应用场景:因为单件模式的作用是确保某个类全局只有一个实例,因此常常被用来管理共享的资源例如:数据库连接池或者线程池。另外还有:缓存、对话框、处理
偏好设置和注册表的对象、日志对象、充当打印机、显卡等设备的驱动程序的对象。