单例模式————Singleton
概念
Java中的单利设计模式,是软件开发中最常用的设计模式之一。某个类在整个系统中只能有一个实例对象可以被获取和使用的代码模式。
例如:代表JVM运行环境的Runtime类。
要点
(1) 某个类只能有一个实例
构造器私有化
(2) 必须自行创建这个实例
含有一个该类的静态变量来保存这个唯一的实例
(3) 必须自行向整个系统提供这个实例
直接暴露(public); 用静态变量的get方法获取
常见形式
1. 饿汉式
直接创建对象,不存在线程安全问题
直接实例化饿汉式(直观)
public class Singleton1(){
public static final INSTANCE = new Singleton1();
private Singleton1(){
}
}
枚举式(最简洁 ;JDK1.5之后)
//表示该类型的对象是有限的几个
public enum Singleton2(){
INSTENCE
}
静态代码块饿汉式(适合复杂实例化)
public class Singleton3(){
public static final INSTANCE;
static{
INSTANCE = new Singleton3();
}
private Singleton3(){
}
}
2. 懒汉式
延迟创建对象
线程不安全(适合单线程)
//提供一个静态方法来获取实例对象
public class Singleton4(){
private static final INSTANCE;
private Singleton4(){
}
public Singleton4 getInstance(){
if(INSTANCE == null){
INSTANCE = new Singleton4();
}
return INSTANCE ;
}
}
线程安全(适合多线程)
public class Singleton5(){
private static final INSTANCE;
private Singleton5(){
}
if(INSTANCE == null){
Synchronized(Singleton5.class){
public Singleton4 getInstance(){
if(INSTANCE == null){
INSTANCE = new Singleton5();
}
return INSTANCE ;
}
}
}
}
静态内部件类式(适合多线程)
public class Singleton6(){
private Singleton6(){
}
privated static class inner{
public static final INSTANCE = new Singleton6();
}
public static Singleton6 getInstance(){
return INSTANCE;
}
}