大家对单例模式应该都是耳熟能详,手机内存有限,所以在很多时候我们都需要用到单例模式来减少资源开销,比方涉及到io操作之类,单例模式难点就是在有效降低资源的情况下保证多线程安全
1,饿汉式,一般代码如下
package com.spring.singletonpatten;
/**
* Created by android_swift on 16/5/28.
*/
public class HurrySingleton {
private HurrySingleton() {
}
public static final HurrySingleton hurrySingleton = new HurrySingleton();
public static HurrySingleton getHurrySingleton(){
return hurrySingleton;
}
}
隐藏公共的构造方法,类创建的时候创建一个对象,对外提供一个静态方法,供其他地方调用,永远都只能获取到当前类的唯一一个对象
2,懒汉式,一般代码如下
package com.spring.singletonpatten;
/**
* Created by android_swift on 16/5/28.
*/
public class LazySingleton {
private LazySingleton() {
}
public static LazySingleton lazySingleton;
public static synchronized LazySingleton getLazySingleton(){
if (null == lazySingleton){
lazySingleton = new LazySingleton();
}
return lazySingleton;
}
}
同样的道理,也会把public的constactor隐藏起来,但是与之不同的是初始化并非在类创建的时候初始化,而是在第一次调用的时候进行初始化,以后每次调用都会同步一下数据,这样会造成资源的浪费,好处是不需要默认进行初始化,但是相比而言,由于每次都需要同步,而且第一次调用要进行初始化,会造成一定的数据延迟,所以这种方式不推荐