单例模式的简单理解

        单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例 。

 

其又分为三种形式

饿汉式,懒汉式,双重锁式

 

首先是饿汉式

 

 
public class SpUtils{
    //在自己内部定义自己的一个实例,只供内部调用
    private static final SpUtils spUtils= new SpUtils();
    private SpUtils(){
    }
    //这里提供了一个供外部访问本class的静态方法,可以直接访问获得本类初始化对象
    public static SpUtils getInstance(){
        return spUtils;
    }
}

 

然后是懒汉式

 

 
private static SpUtils spUtils= null;
public static synchronized SpUtils getsp() {
    // 这个方法,不用每次都进行生成对象,只有第一次生成对象
    // 使用时生成实例,提高了效率!  
    if (spUtils == null)
        spUtils = new SpUtils();
    return spUtils;
}  


双重锁式

 

 

 

 
//将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。
private static volatile SpUtils spUtils=null;
private SpUtils(){}
public static SpUtils getsp(){ 
    if(spUtils==null){ 
        synchronized(SpUtils .class){ 
            if(spUtils==null){ 
                spUtils=new SpUtils(); 
                    } 
                        } 
                            } return spUtils;}

优点

实例控制:Singln 会阻止其他对象实例化其自己的 Singln 对象的副本,从而确保所有对象都访问唯一实例

灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程

缺点

开销:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销,可以通过使用静态初始化解决此问题。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值