现在的位置: 首页 > 综合 > 正文

Java单例模式:饿汉式和懒汉式的实现

2014年02月10日 ⁄ 综合 ⁄ 共 1581字 ⁄ 字号 评论关闭

 

本文参考IcyFenix在javaeye的博客http://icyfenix.javaeye.com/blog/575052讲述的内容
向IcyFenix致敬!


// 1、饿汉式

/**

 * 饿汉式单例

 * 

 * @author Lrwin

 * 

 */

public class HungrySingleton {

/** jvm保证instance只被初始化一次 */

private static HungrySingleton instance = new HungrySingleton();

 

/** 阻止外部使用new实例化对象 */

private HungrySingleton() {

 

}

 

/**

* 获取实例

* @return 唯一的instance

*/

public static HungrySingleton getInstance() {

return instance;

}

}

 

// 2、懒汉式

 

/**

 * 懒汉式单例

 * 

 * @author Lrwin

 * 

 */

public class LazySingleton {

/**

* 阻止外界使用new实例化对象

*/

private LazySingleton() {

 

}

 

/**

* 只有在调用getInstance()时此类才会被装载 在SingletonKerriganF.java中说明了加载顺序

*/

private static class SingletonHolder {

/**

* 对象实例,jvm保证只初始化一次

*/

static final LazySingleton INSTANCE = new LazySingleton();

}

 

/**

* 获取实例

* @return 返回唯一实例

*/

public LazySingleton getInstance() {

return SingletonHolder.INSTANCE;

}

}

 

// 3、懒汉式单例内部类加载顺序 (来自http://www.javaeye.com/topic/575052)

 

/**

 * 实现单例访问Kerrigan的第六次尝试

 * 

 * @author IcyFenix

 * @see http://www.javaeye.com/topic/575052

 */

public class SingletonKerriganF {

 

private static String arg = null;

 

private static class SingletonHolder {

/**

* 单例对象实例

*/

static final SingletonKerriganF INSTANCE = new SingletonKerriganF();

}

 

public static SingletonKerriganF getInstance() {

return SingletonHolder.INSTANCE;

}

 

public SingletonKerriganF() {

System.out.println("Kerrigan get arg:" + getArg());

System.out.println("Kerrigan created!");

}

 

public static String getArg() {

return arg;

}

 

public static void setArg(String arg) {

SingletonKerriganF.arg = arg;

}

 

public static void main(String[] args) {

System.out

.println("SingletonKerriganF was loaded,but SingletonKerriganF$SingletonHolder don't");

SingletonKerriganF.setArg("this maybe some config files etc....");

SingletonKerriganF.getInstance();

}

}

 

抱歉!评论已关闭.