单例模式
定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
有以下几个要素:
- 私有的构造方法
- 指向自己实例的私有静态引用
- 以自己实例为返回值的静态的公有的方法
/**
** 饿汉模式
** 在单例类被加载时候,就实例化一个对象交给自己的引用
**/
public class Singleton {
//私有静态引用
private static Singleton singleton = new Singleton();
//私有构造
private Singleton(){
}
//公开静态方法返回自己的实例
public static Singleton getInstance(){
return singleton;
}
}
/**
** 懒汉模式
** 调用取得实例方法的时候才会实例化对象
**/
public class Singleton {
private static Singleton singleton;
private Singleton(){
}
public static synchronized Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
一个JVM中会出现多个单例吗?
Class c = Class.forName(Singleton.class.getName());
Construct ct = c.getDeclaredConstructor();
ct.getAccessible(true);
Singleton singleton = (Singleton)ct.newInstance();
注:单例模式因为其构造方法是私有的,所以它是不可以被继承的,但是其他很多单例模式是可以继承的,例如登记式单例。