该系列博客为读《android源码设计模式解析与实战》的个人知识点记录。
单例模式
- 定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
实现单例模式关键点
- 构造函数不对外开放,一般为Private;
- 通过一个静态方法或者枚举返回单例对象;
- 确保单例的对象有且只有一个,尤其是在多线程环境下;
- 确保单例类对象在反序列化时不会重新构建对象。
单例模式的实现方式
饿汉模式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){
}
public static Singleton getInstance() {
return instance;
}
}
这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法, 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance显然没有达到lazy loading的效果。
懒汉模式
线程不安全
public class Singleton {
private static Singleton instance;
private Singleton (){}