欢迎来到天天文库
浏览记录
ID:40299781
大小:78.00 KB
页数:23页
时间:2019-07-30
《Java实现单例模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、2009年05月14日星期四12:00Java设计模式圣经连载(04)-单例模式单例模式是一种常见的设计模式,在《Java与模式》一书中,阎宏博士对单例模式做了全面的总结。单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。单例模式有一下特点:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。说明:一下的代码来自阎宏博士的《Java与模式》一书,其中对一些类的写法做调整(符合Java1.5的习惯),另外还加了测试方法。一、懒汉式单例在类被加载的时候,唯一实例已经被创建。这个设计模式
2、在Java中容易实现,在别的语言中难以实现。/***CreatedbyIntelliJIDEA.*User:leizhimin*Date:2007-9-11*Time:14:57:08*<>单例模式-懒汉式单例*/publicclassLazySingleton{ /** *私有静态对象,加载时候不做初始化 */ privatestaticLazySingletonm_intance=null; /** *私有构造方法,避免外部创建实例 */ privateLazyS
3、ingleton(){ } /** *静态工厂方法,返回此类的唯一实例. *当发现实例没有初始化的时候,才初始化. *@returnLazySingleton */ synchronizedpublicstaticLazySingletongetInstance(){ if(m_intance==null){ m_intance=newLazySingleton(); } returnm_intance; }}二、饿汉
4、式单例在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。/***CreatedbyIntelliJIDEA.*User:leizhimin*Date:2007-9-11*Time:14:45:25*<>单例模式-饿汉式单例*/publicclassEagerSingleton{ /** *私有的(private)唯一(staticfinal)实例成员,在类加载的时候就创建好了单例对象 */ privatestaticfinalEag
5、erSingletonm_instance=newEagerSingleton(); /** *私有构造方法,避免外部创建实例 */ privateEagerSingleton(){ } /** *静态工厂方法,返回此类的唯一实例. *@returnEagerSingleton */ publicstaticEagerSingletongetInstance(){ returnm_instance; }}三、登记式单例这个单例实际上维护的是一组单例类的
6、实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。/***CreatedbyIntelliJIDEA.*User:leizhimin*Date:2005-9-11*Time:15:20:16*<>单例模式-登记式单例*/publicclassRegSingleton{ /** *登记薄,用来存放所有登记的实例 */ privatestaticMapm_registry=newHash
7、Map(); //在类加载的时候添加一个实例到登记薄 static{ RegSingletonx=newRegSingleton(); m_registry.put(x.getClass().getName(),x); } /** *受保护的默认构造方法 */ protectedRegSingleton(){ } /** *静态工厂方法,返回指定登记对象的唯一实例; *对于已登记的直接取出返回,对于还未登记的,先登记,然后取出返回
8、*@paramname *@returnRegSingleton */ publicstaticRegSingletongetInstance(String
此文档下载收益归作者所有