设计模式--单例模式

单例模式的作用:保证一个类只能产生一个实例,减少内存开销,屏蔽对象创建的复杂度。

单例模式编码的核心:
*构造方法私有化,避免直接创建对象
*单例类中包含一个静态实例
*包含一个静态方法返回,切返回值为单例类的实例(类的静态实例)

单例的几种实现及优缺点说明:

1.饿汉式
/*单例模式:饿汉式
* */
public class SingleInstance {
    private static final SingleInstance instance = new SingleInstance();
    
    private SingleInstance(){
    }
    
    public static SingleInstance getInstance(){
        return instance;
    }
}
优点:写法简单,不存在多线程同步问题。
缺点:单例随着类的加载而初始化,但可能出现单例产生之后,一直未被使用却一直占用内存,直到程序结束的情况。

2.懒汉式
public class SingleInstance{
    private static SingleInstance mInstance;
    
    private SingleInstance(){ 
    }
    
    synchronized public static SingleInstance getInstance(){
        if(mInstance == null){
            mInstance = new SingleInstance();
        }
        return mInstance;
    }
}
优点:只在需要的时候产生单例模式,一些场景下节约内存
缺点:对类的静态方法用同步synchronized,同步方法调用时效率低。

3.懒汉式优化版
public class SingleInstance{
    private static SingleInstance mInstance;
    
    private SingleInstance(){   
    }
    
    synchronized public static SingleInstance getInstance(){
        if(mInstance == null){
            synchronized (SingleInstance.class) {
                if(mInstance == null){
                    mInstance = new SingleInstance();
                }
            }
        }
     return mInstance;
}
优点:同步方法改为同步代码块,同步方法调用时提高效率。

4.最佳实现方法
public class SingleInstance{
    
        private SingleInstance(){
        }
        
        public static SingleInstance getInstance(){
            return SingleInstanceClass.instance;
        }
        
        private static class SingleInstanceClass{
            private static SingleInstance instance = new SingleInstance();
        }
    
    }
优点:内存占用低,线程同步效率高,线程安全(原因未查明)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值