读书人

单例设计形式

发布时间: 2013-04-09 16:45:09 作者: rapoo

单例设计模式
饿汉式懒汉式的调用方法,给个加注释的例子,写了亲
[解决办法]
http://www.iteye.com/topic/1121918
[解决办法]
public class Singleton{
private static Singleton{};
private static Singleton st=new Singleton();
public static Singleton get(){
return st;
}
[解决办法]
懒汉式

public class LazySingleton {  

   private static LazySingleton instance = null;

   private LazySingleton(){};

   public static synchronized LazySingleton getInstance(){

   if(instance==null){
     instance = new LazySingleton();
     }

   return instance;
  }
}


饿汉式
public class EagerSingleton {  

private static EagerSingleton instance = new EagerSingleton();

private EagerSingleton(){};

public static EagerSingleton getInstance(){
return instance;
}
}

[解决办法]
这两种方式调用的时候是一样的,就只有初始化的时间不一样。

前一种是在定义这个对象的时候就初始化,也就是类加载的时候。
后一种是在调用这个方法的时候才初始化。

上面例子很清晰了。
[解决办法]
利用JAVA加载静态内部类的原理,实现懒汉加载,不需要同步
public class TestObject{
private TestObject(){}

public static TestObject instance(){
return InnerSingletonHandler.getSingleton();
}

private static class InnerSingletonHandler{
private static TestObject singleton = new TestObject();

private InnerSingletonHandler(){}

private static TestObject getSingleton(){
return singleton;
}
}
}
[解决办法]

package com.javapatterns.singleton;

/**
* 饿汉式单例类
*
*/
public class EagerSingleton {

private static final EagerSingleton m_instance = new EagerSingleton();

/**
* 私有的构造方法
*/
private EagerSingleton(){

}

/**

* 功能:静态工厂方法
* @return EagerSingleton


* @param @return
* @date 2013-4-4
* @author arch_mage
*/
public static EagerSingleton getInstance() {
return m_instance;
}


}




package com.javapatterns.singleton;

/**
* 懒汉式单例类
*
*/
public class LazySingleton {

private static LazySingleton m_instance = null;

/**
* 私有构造方法
*/
private LazySingleton() {

}

synchronized public static LazySingleton getInstance() {
if(m_instance == null) {
m_instance = new LazySingleton();
}
return m_instance;
}

}

读书人网 >J2EE开发

热点推荐