黑马程序员_单例设计模式

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

系统中你需要获得某个类的唯一实例,所有客户端对它的访问都将通过一个公共的访问点获得

创建一个类并使其:
(A).定义一个私有的构造器
(B).定义一个私有、静态的变量指向自己
(C).定义一个公有、静态的访问方法用于返回该类的一个唯一实例

分为 饿汉式懒汉式,下面是一个简单的示例代码,应该很容易理解:

饿汉式代码:

 //java设计模式:单例模式(饿汉式)
public class Singleton {
// 提供一个静态私有变量指向自己,属于类
    private static Singleton instance = new Singleton();// 提前消费
// 提供私有构造器,只有在当前类中可以使用new,外界不能构造该类的对象
    private Singleton() {
    }

// 对外提供一个公共访问点
    public static Singleton getInstance() {
        return instance;
    }
}

懒汉式代码:


// java设计模式:单例模式(懒汉式)
public class Singleton {
    private static Singleton instance = null;
    private Singleton(){}
    //synchronized避免在访问量比较大的时候 第一个线程的new Singleton还没来得及赋值给instance,第二个线程就来了,还要进行new ……
    public synchronized static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

这段代码还可以做更好的优化,如下:

public class Singleton {
    private static Singleton instance = null;
    private Singleton(){}

    public static Singleton getInstance(){
        if(instance == null)){
            synchronized (Singleton.class){ //在这里加同步代码锁,可以减少锁的判断次数
            if(instance == null)
                instance = new Singleton();
    }
        return instance;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值