php 懒汉式,关于单例设计模式中的懒汉式和饿汉式的区别??

单例设计模式的作用:使一个类在内存中只存在一个对象。

我们知道,既然在内存中有且只有一个对象,我们知道构造方法可以创建对象,那么产生一个对象的前提即让构造方法私有化,不让外部访问。这样只能在内部访问,外部不可访问,既然是单个对象,则是类名直接调用,所以其中变量应该被static。那么我来详细概述下单例设计模式的细节。

单例设计模式实现步骤:

①将构造函数初始化。

例如:private Single(){}

②在类中创建一个本类对象。

例如:private static Single s= newSingle();

③提供一个访问方法可以获取到该对象。

例如:public static Single getInstance()

{

return s ;

}

好了,罗嗦了这么多,我们还是看看如何用代码实现单例的细节吧!

单例设计模式有两种表现形式:

①“饿汉式”

②“懒汉式”

我们先来看看传说中的饿汉式:

public class Single

{

private Single(){}//构造方法私有化

private static Single instance = new Single();//实例化对象

public static Single getInstance()

{

return instance;//暴露方法返回instance的对象

}

}

饿汉式的特点:创建对象的同时就直接实例化对象。

那我们在看看“懒汉式”:

public class Single

{

private Single(){}//构造方法私有化

private static Single instance = null;

public static Single getInstance()

{

if (instance==null)//这里判断看instance是否为空

{

instance = new Single();//对象为空,实例化对象

}

return instance;//返回对象

}

}

懒汉式的特点:方法被加载时才进行初始化操作,“懒汉式”又被称为延迟加载设计模式。

仔细观察,懒汉式的代码是有弊端的,我们来看看。

当多线程访问懒汉式时,因为懒汉式的方法内对共性数据进行多条语句的操作。所以容易出现线程安全问题。

class Single

{

private static Single s = null;

private Single(){}

public static Single getInstance()

{ // 锁是谁?字节码文件对象;

if (s == null)//该处判断是减少判断,增加效率

{

synchronized (Single.class)//保证线程安全

{

if (s == null)//判断对象是否为空

s = new Single();//实例化对象

}

}

return s;//返回变量

}

}

上面加了几处判断,我们来分析下:

① s==null 是为了减少判断,增加效率

②synchronized (Single.class)为了保证线程安全

③if (s == null)是为了判断对象是否为空

为了解决,加入同步机制,解决安全问题。但是却带来了效率降低。所以我们不建议使用“懒汉式”,饿汉式简单高效,安全。

好了,到这里,我们的单例设计模式也基本接近尾声了,发现对于单例的解读也不是非常难,本身设计模式的目的就是为了方便编程才有了它的用武之地,所以设计模式掌握了其本质,也不会有那种“高大上”的阴影啦,好了,我们继续加油吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值