来源于《设计模式之禅》 秦小波著
1. 饿汉模式(推荐)
package com.zby.singleton;
/*
* 饿汉模式,推荐
*/
public class Singleton1 {
private static final Singleton1 singleton = new Singleton1();
private Singleton1(){}
public static Singleton1 getinstance() {
return singleton;
}
public static void doSomething() {
//类中的其他方法,尽量是static
}
}
2. 饱汉模式(不推荐)
package com.zby.singleton;
/*
* 懒汉模式
*/
public class Singleton2 {
private static Singleton2 singleton = null;
private Singleton2(){}
public static synchronized Singleton2 getinstance() {
if(singleton == null)
singleton = new Singleton2();
return singleton;
}
}
一般在什么情况下使用单例模式?
1. 单例工厂,SSH框架中比较经典的模式
2. 使用代理层的时候,对象池的时候
3. 读取配置文件的类要用单例模式,配置文件只要读取一次就可以全局使用了,并且对配置文件进行存储操作的时候,如果实例多了,会造成不同步
4. 其实最简单的就应该是经常使用的数据库连接
5. 创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源
6. 需要定义大量的静态常量和静态方法(如工具类的环境),可以采用单例模式(当然,也可以直接声明为static的方式)。
单例模式:保证一个类中,有且只有一个实例存在并提供一个访问点供全局访问,该实例可以被所有的程序来访问。一般在以下情况下使用:
1. 当要用一个类时,又要用该类中的一个实例
2. new来创建实例时会给程序造成资源的浪费,而且实例越多也不好控制
3. 不同的线程调用时,可能会引起不同步的现象。