1.什么事单例模式?
&&:单例模式可以保证系统一个对象只有一个实例。如果希望在一个系统中只有一个对象实例,单例是不错的;
2.饿汉方式创建单例
/**
* 饿汉模式 典型的以空间换时间的模式。
* Created by admin on 2017/2/27.
*/
public class SingletonTest {
private final static SingletonTest s = new SingletonTest();
public static SingletonTest getS(){
return s;
}
/**
* 一个私有的构造方法,使得外部对象无法创建实例。
*/
private SingletonTest(){
}
3.懒汉方式创建单例
/**
* 懒汉方式创建单例
* Created by admin on 2017/2/27.
*/
public class SingletonTest2 {
private static SingletonTest2 s2 = null;
public static SingletonTest2 getS(){
if(s2==null){
return new SingletonTest2();
}else {
return s2;
}
}
private SingletonTest2(){
}
}
4.内部类方式实现单例
/**
* 内部类方式保证单例
* Created by admin on 2017/2/27.
*/
public class Singleton3 {
static class SingletonHolder{
static Singleton3 s3 = new Singleton3();
}
public static Singleton3 getS(){
return SingletonHolder.s3;
}
private Singleton3(){};
}
5.双重锁方式实现单例
/**
* 双重锁解决了线程等待的问题
* Created by admin on 2017/2/27.
*/
public class SingletonDouble {
private volatile static SingletonDouble sd = null;
public static SingletonDouble getSd(){
if(sd==null){
synchronized (SingletonDouble.class){
sd = new SingletonDouble();
return sd;
}
}else {
return sd;
}
}
private SingletonDouble(){
}
}