单例模式
要点
1、 此类只有一个实例。
2、 它必须自行创建这个实例。
3、 它必须自行向系统提供这个实例。
单例的加载模式
一、饿汉模式:加载类时,立即实例化对象
/*
* 饿汉模式加载单例
*/
public class Demon {
private String name;
// 此类只有一个实例
private static Demon demon = new Demon();
// 确保自行创建这个实例
private Demon() {
}
// 自行向系统提供这个实例
public static Demon getDemon() {
return demon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注:这种方式比较消耗计算机资源,但是却不存在多线程安全问题。
二、懒汉模式
1、单线程下的加载方式
/*
* 懒汉模式加载单例(单线程下的)
*/
public class Demon {
private String name;
// 此类只有一个实例
private static Demon demon;
// 确保自行创建这个实例
private Demon() {
}
// 自行向系统提供这个实例
public static Demon getDemon() {
if (demon == null) {
demon = new Demon();
}
return demon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2、多线程下的加载方式
/*
* 懒汉模式加载单例(多线程下的)
*/
public class Demon {
private String name;
// 此类只有一个实例
private static Demon demon;
// 确保自行创建这个实例
private Demon() {
}
// 自行向系统提供这个实例
public static Demon getDemon() {
if (demon == null) {
synchronized (Demon.class) {
if (demon == null) {
demon = new Demon();
}
}
}
return demon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
优缺点
优点:
客服端使用单例模式类实例的时候,只需要调用一个单一的方法即可以生成一个唯一的实例,有利于节约资源。
缺点:
1、难实现序列化,难持久化,难通过网络传输。
2、无法在继承结构中使用。