一、单例设计模式
主要思想:
简而言之就是该类在内存中只能存在一个实例化对象,也就是说其他类不能创建该类的实例化对象。
二、饿汉式单例设计模式
实例化对象随着类的加载而加载,即使该对象未被使用也会被创建
代码实现:
public class eagerSingleDesignTest {
//构造私有
private eagerSingleDesignTest() {}
//创建私有静态实例化对象
private static eagerSingleDesignTest asdTest=new eagerSingleDesignTest();
//创建静态方法获取实例化对象
public static eagerSingleDesignTest getEagerSingleDesignTest() {
return asdTest;
}
}
三、懒汉式单例设计模式
只有当需要实例化对象的时候才会去创建
代码实现(线程不安全):
public class lazySingleDesignTest {
//私有构造
private lazySingleDesignTest() {}
//创建对象
private static lazySingleDesignTest lsdTest=null;
//静态方法获取对象
public static lazySingleDesignTest getlLazySingleDesignTest() {
//判断对象是否已经存在
if(lsdTest==null) {
lsdTest=new lazySingleDesignTest();
}
return lsdTest;
}
}
线程安全(同步方法实现):
public class lazySingleDesignTest {
//私有构造
private lazySingleDesignTest() {}
//创建对象
private static lazySingleDesignTest lsdTest=null;
//静态方法获取对象,同步方法保证线程安全
public static synchronized lazySingleDesignTest getlLazySingleDesignTest() {
//判断对象是否已经存在
if(lsdTest==null) {
lsdTest=new lazySingleDesignTest();
}
return lsdTest;
}
}
线程安全(同步代码块实现):
public class lazySingleDesignTest {
//私有构造
private lazySingleDesignTest() {}
//创建对象
private static lazySingleDesignTest lsdTest=null;
//静态方法获取对象
public static lazySingleDesignTest getlLazySingleDesignTest() {
//外面嵌套一个if判断可以提高代码的效率,当lsdTest不为空的时候直接就返回lsdTest了
if(lsdTest==null){
//同步代码块保证线程安全
synchronized(lazySingleDesignTest.class){
//判断对象是否已经存在
if(lsdTest==null) {
lsdTest=new lazySingleDesignTest();
}
}
}
return lsdTest;
}
}
四、总结
单例模式的懒汉式和饿汉式实现就是这样啦,相比较下饿汉式在开发中的使用较多,但是懒汉式又有可能在面试中被问到,懒汉式的实现涉及到了线程安全问题,所以这两种实现方式我们都要会。