java设计模式(三)---单例模式
来源:互联网 发布:oppo手机照片导入mac 编辑:程序博客网 时间:2024/06/01 10:13
一、单例模式的基本定义:
一个类有且仅有一个实例,并且提供了一个全局的访问点
二、单例模式适用场景:
1. 需要频繁的实例化然后销毁对象 2. 创建对象时耗时或者消耗资源过多,但又经常用到的对象 3. 有状态的工具对象 4. 频繁访问数据库或者文件的对象 5. 资源共享情况下,避免资源操作时导致性能损耗 6. 控制资源的情况下,方便资源之间的互相通信,如线程池
三、单例模式的特点:
1.只能有一个实例
2.单例必须是自己来创建自己的唯一实例
3.单例必须给其他使用者提供接口
四、实现单例模式:
实现单例模式的方法一般有三种,面试的时候有可能会让写一个单例模式的实现。所以还是有必要记一下代码的。可以分几步来记
1.单例模式的构造方法必须是私有的,因为不能让其他类调用的时候直接new。
2.提供的getInstance必须是静态方法,要不然别人也访问不到。
3.类实例的定义必须也是静态的。
三种实现方法如下:
I.饿汉式:单例实例在类装载的时候就构建,急切初始化。
顾名思义,饿汉就是一个经常挨饿的汉子,那么他的心里就是不管我现在饿不饿,我都得备着干粮,绝对不能吃的时候没有,那么就在类加载的时候直接new,不管用不用的到,我先初始化。
优点:线程安全,初始化好了,所以调用的时候不用再去初始化,会很快
缺点:如果初始化了,但是一直没有用到,那就尴尬了,利用效率不高
II.懒汉式:单例在第一次使用的时候再加载,延迟初始化
同样,懒汉,就说明非常懒,属于不饿到不行就不出去找吃的,呵呵,所以只有在使用到实例的时候再初始化。
优点:用到的时候加载,减少了不必要的资源占用。‘’
缺点:非线程安全
III.双重检查(懒汉加强版)
主要是加同步关键字,保证线程安全
优点:线程安全,避免初始化浪费资源
缺点:第一次加载的时候可能会慢点
单例的使用
EHanTest test = EHanTest.getInstance();
简单的不要不要的,哈哈