Android 单例模式:
设计模式: 是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。它的目的:为了可重用代码,让代码更容易被别人理解,保证代码的可靠性。
单例模式:保证整个应用中某个实例(对象)有且只有一个。
类型:主要有饿汉式,懒汉式,同步懒汉式,双重检查锁式 ,内部类式。
1.饿汉式:加载类的时候就去创建实例了,即在没使用之前就创建好了实例,会带来一些性能上的问题(加载类的时候会慢一些,使用时快,由于它在使用之前就创建好实例,所以是线程安全的)。
/**
* 饿汉式
*/
public class Singleton01 {
// 1。私有化构造器
private Singleton01 () {
}
// 2.创建私有的静态实例
private static Singleton01 instance = new Singleton01();
//3.提供静态的公共的方法供外部调用
public static Singleton01 getInstance () {
return instance;
}
}
2.懒汉式:在使用在去实例化对象。(线程不安全,当多个线程同时去创建实例就会出现问题)
/**
* 懒汉式
*/
public class Singleton02 {
// 1。私有化构造器
private Singleton02() {
}
// 2.声明私有的静态实例
private static Singleton02 instance = null;
//3.提供静态的公共的方法供外部调用
public static Singleton02 getInstance () {
//当实例为空时才去创建
if (instance == null) {
instance = new Singleton02();
}
return instance;
}
}
3.同步懒汉式:为解决懒汉式线程不安全的问题,我们可以使用同步,但是同步的代价必然会一定程度的使程序的并发度降低。(并发度表示,在一个时间点上,可能与服务端进行交互的用户的数量。)
/**
* 懒汉式
*/
public class Singleton03 {
// 1。私有化构造器
private Singleton03() {
}
// 2.声明私有的静态实例
private static Singleton03 instance = null;
//3.提供静态的公共的方法供外部调用
public static Synchronized Singleton03 getInstance () {
//当实例为空时才去创建
if (instance == null) {
instance = new Singleton03();
}
return instance;
}
}
4.双重检查锁式:一是线程安全,二是保证程序的高并发度
public class Singleton04 {
// 1。私有化构造器
private Singleton04() {
}
// 2.声明私有的静态实例
private static Singleton04 instance = null;
//3.提供静态的公共的方法供外部调用
public static Singleton04 getInstance () {
//当实例为空时才去创建
if(instance == null) {
synchronzied(Singleton04.class) {
Singleton temp = instance;
if(temp == null) {
temp = new Singleton04();
instance = temp
}
}
}
return instance;
}
}
5.内部类式:利用Java机制,内部类只在getInstance()在第一次调用时才会去实例化一次
/**
* 内部类式
*/
public class Singleton05 {
private Singleton05 () {
}
private static class SingletonHolder {
private final static Singleton05 instance = new Singleton05();
}
public static Singleton05 getInstance(){
return SingletonHolder.instance;
}
}