一、简介
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
二、特点
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
三、实现单例模式的条件
1、将实现单例模式的类的构造函数私有化。
2、在其内部产生该类的实例化对象,并将其封装成private static类型。
3、 定义一个静态方法返回该类的实例。
四、实现方式
1、饿汉式,线程安全
package cn.singleton;
public class Singleton01 {
private Singleton01(){
};
private static Singleton01 instance = new Singleton01();
public static Singleton01 getInstance(){
return instance;
}
}
2.懒汉式,线程不安全
package cn.singleton;
public class Singleton02 {
private Singleton02(){
}
private static Singleton02 instance;
public static Singleton02 getInstance(){
if(instance == null){
instance = new Singleton02();
}
return instance;
}
}
3、懒汉式,线程安全
package cn.singleton;
public class Singleton03 {
private Singleton03(){
}
private static Singleton03 instance;
public synchronized static Singleton03 getInstance(){
if(instance == null){
instance = new Singleton03();
}
return instance;
}
}
4、双重检验锁,线程安全
package cn.singleton;
public class Singleton04 {
private Singleton04(){
}
private static volatile Singleton04 instance;
public static Singleton04 getInstance(){
if(instance == null){
synchronized(Singleton04.class){
if(instance == null){
instance = new Singleton04();
}
}
}
return instance;
}
}
5、静态内部类,线程安全
package cn.singleton;
public class Singleton05 {
private Singleton05(){
}
public static class inner{
private static final Singleton05 instance = new Singleton05();
}
public static Singleton05 getInstance(){
return inner.instance;
}
}