关于JAVA中的singleton模式

来源:互联网 发布:中文域名好吗 编辑:程序博客网 时间:2024/04/24 02:10

百度知道上的,非笼统复制:

 

package test;public class Singleton { private Singleton s; private Singleton() {   } public static Singleton getSingleton() {  if(s==null)s=new Singleton();  return s; } }这就是一个单例模式,我想应该不用注释了,原理就是这个类的构造方法private了,所有在外边不能调用,也就不能new Singleton();得到实例,那么想得到实例就得调用它的静态方法getSigleton();即Singleton.getSigleton();就会返回一个Singleton的实例,注意此方法中的语句,即如果你是第一次调用这个方法那么它会给你new一个实例,以后再调用得到的都是这个实例,也就是说从始至终就只有一个Singleton的实例,这就是单例模式。
单例模式,顾名思义就是确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式又分为饿汉式单例模式,懒汉式模式,登记式单例模式。代码如下:饿汉式单例模式:public class EagerSingleton {private static final EagerSingleton m_instance = new EagerSingleton();private EagerSingleton() {}public static EagerSingleton getResource() {return m_instance;}}
懒汉式模式:public class LazySingleton {private static final LazySingleton m_instance = null;private LazySingleton() {}synchronized public static LazySingleton getInstance() {if (m_instance == null) {return new LazySingleton();}return m_instance;}}登记式单例模式:public class RegSingleton {private static Map<Object, Object> m_registry = new HashMap<Object, Object>();static {RegSingleton m_instance = new RegSingleton();m_registry.put(m_instance.getClass().getName(), m_instance);}protected RegSingleton() {}public static RegSingleton getInstance(String name) {if (name == null) {name = "RegSingleton";}if (m_registry.get(name) == null) {try {m_registry.put(name, Class.forName(name).newInstance());} catch (Exception e) {System.out.println("Error happened.");}}return (RegSingleton) m_registry.get(name);}}
 
具体实例:
public class EagerInitialization {   private static Resource resource = new Resource();   public static Resource getResource() {   return resource;   }   static class Resource {   }   }
//测试类

class SingletonTest {  public static void main(String[] args) {    Resource r1 = EagerInitialization .getResource();    Resource r2 = EagerInitialization .getResource();    if (r1==r2)      System.out.println("r1 is the same instance with r2");    else      System.out.println("r1 is not the same instance with r2");  }}

如果想学习设计模式,推荐本书:阎宏的《java与模式》
参考网址:http://zhidao.baidu.com/question/126080149.html
http://wuzeitianxia.i.sohu.com/blog/view/110329921.htm
 
原创粉丝点击