单例模式分为很多种,首先最简单的是饿汉模式。
public class SingleDemo {
// 实例化单例对象
private static final SingleDemo singleDemo = new SingleDemo();
// 私有构造方法
private SingleDemo() {
}
// 返回单例对象
public static SingleDemo getSingleDemo(){
return singleDemo;
}
}
虽然饿汉模式实现简单,线程安全,但是会产生额外对象,所以又出现了了懒汉模式。懒汉模式是使用到的时候才会去创建实例,不过创建的时候要保证线程安全,下面介绍两种懒汉模式。
public class SingleDemo {
// 定义对象
private static SingleDemo singleDemo ;
// 私有构造方法
private SingleDemo() {
}
// 返回创建的单例对象
public static synchronized SingleDemo getSingleDemo(){
if (singleDemo == null){
singleDemo = new SingleDemo();
}
return singleDemo;
}
}
这种事在方法上加锁效率较低,下面这种效率更高。
public class SingleDemo {
// 定义对象
private static SingleDemo singleDemo;
// 私有构造方法
private SingleDemo() {
}
// 返回创建的单例对象
public static SingleDemo getSingleDemo() {
if (singleDemo == null) {
synchronized (SingleDemo.class) {
if (singleDemo == null) {
singleDemo = new SingleDemo();
}
}
}
return singleDemo;
}
}