java 单例模式的好处

java 单例模式的好处

ID:11492599

大小:139.50 KB

页数:41页

时间:2018-07-12

java 单例模式的好处_第1页
java 单例模式的好处_第2页
java 单例模式的好处_第3页
java 单例模式的好处_第4页
java 单例模式的好处_第5页
资源描述:

《java 单例模式的好处》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、单例模式是一种常见的设计模式,在《Java与模式》一书中,阎宏博士对单例模式做了全面的总结。 JavaSingleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbagecollection)。   单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:    1、控制资源的使用,通过线程同步来控制资源的并发访问;    2、控制实例产生的数量,达到节约资源的目的。     3、

2、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。  单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。单例模式有一下特点:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。说明:一下的代码来自阎宏博士的《Java与模式》一书,其中对一些类的写法做调整(符合Java1.5的习惯),另外还加了测试方法。一、懒汉式单例在类被加载的时候,唯一实例已经被创建。这个设计模式在Java中容易实现,在

3、别的语言中难以实现。/***CreatedbyIntelliJIDEA.*User:leizhimin*Date:2007-9-11*Time:14:57:08*<>单例模式-懒汉式单例*/publicclassLazySingleton{    /**     *私有静态对象,加载时候不做初始化     */    privatestaticLazySingletonm_intance=null;    /**     *私有构造方法,避免外部创建实例     */    privateLazySingl

4、eton(){    }    /**     *静态工厂方法,返回此类的唯一实例.      *当发现实例没有初始化的时候,才初始化.     *@returnLazySingleton     */    synchronizedpublicstaticLazySingletongetInstance(){        if(m_intance==null){            m_intance=newLazySingleton();        }        returnm_intanc

5、e;    }}二、饿汉式单例在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。/***CreatedbyIntelliJIDEA.*User:leizhimin*Date:2007-9-11*Time:14:45:25*<>单例模式-饿汉式单例*/publicclassEagerSingleton{    /**     *私有的(private)唯一(staticfinal)实例成员,在类加载的时候就创建好了单例对象     */    p

6、rivatestaticfinalEagerSingletonm_instance=newEagerSingleton();    /**     *私有构造方法,避免外部创建实例     */    privateEagerSingleton(){    }    /**     *静态工厂方法,返回此类的唯一实例.     *@returnEagerSingleton     */    publicstaticEagerSingletongetInstance(){        returnm_in

7、stance;    }}三、登记式单例这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。/***CreatedbyIntelliJIDEA.*User:leizhimin*Date:2005-9-11*Time:15:20:16*<>单例模式-登记式单例*/publicclassRegSingleton{    /**     *登记薄,用来存放所有登记的实例     */    privatesta

8、ticMapm_registry=newHashMap();    //在类加载的时候添加一个实例到登记薄    static{        RegSingletonx=newRegSingleton();        m_registry.put(x.getClass().getName(),x);    }    /**     *受保护的默认构造方法     */    protectedRegSing

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。