设计模式初探之单例模式

设计模式初探之单例模式

单例模式概念:

​ 单例模式一种常见得设计模式,顾名思义就是只能有一个实例。

单例模式应用场景:

​ 线程池、缓存、日志对象以及各种配置的读取。

单例模式实现方法:
  1. 懒汉模式:能实现懒加载,但是在并发情况下使用synchronized 对性能有所影响。
  2. 饿汉模式:不能懒加载,消耗较大,在并发情况下是线程安全的。
  3. Holder模式:饿汉模式和懒汉模式的组合,既实现了懒汉模式的懒加载又实现了饿汉模式的安全性,而且没有使用synchronized 性能得到了保证,同时也是工作中常用的方式。
/**
*	懒汉模式一(非线程安全实现)
*/
public class Singleton{
    private static Singleton single;
  
    private Singleton(){}
    
    public static Singleton getInstance(){
        if (null == single){
            single = new Singleton();
        }
        return single;
    }
}

/**
*	懒汉模式二(线程安全实现)
*/
public class Singleton{
    private static Singleton single;
  
    private Singleton(){}
    
    /**
    *	在getInstance方法上加同步,每次调用都会加锁,效率较低
    */
    public static synchronized Singleton getInstance(){
        if (null == single){
            single = new Singleton();
        }
        return single;
    }
}

/**
*	懒汉模式三(线程安全实现)
*/
public class Singleton{
    private volatile static Singleton single;
  
    private Singleton(){}
 
    /**
    *  双重检查锁定,只有在没有实例的时候加锁,效率进一步提高
    */
    public static Singleton getInstance(){
        if (null == single){
             synchronized (Singleton.class) { 
                  if (null == single){
                      single = new Singleton();
                  }
             }
        }
        return single;
    }
}


/**
*	饿汉模式(天生线程安全)
*/
public class Singleton{
    private static Singleton single = new Singleton();
    
    private Singleton(){};
    
    public static Singleton getInstance(){
        return single;
    }
}

/**
* Holder模式(线程安全,工作中常用方式)
*/

public class Singleton{
    
    private Singleton(){};
    
    /**
    *	私有静态内部类,该内部类的实例没有与外部类的实力存在绑定关系,因而只有被调用的时候才会加载,从而实现延迟加载
    */
   	private static class InnerClass(){
        private static Singleton single = new Singleton();
    }

    public static Singleton getInstance(){
        return InnerClass.single;
    }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值