单例设计模式

单例设计模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,一个类只有一个对象。单例也分为两种单例,一种是饿汗式单例,一种是懒汉式单例,实现步骤如下 
1. 私有构造器
2.创建一个私有的静态类属性 
3.创建一个静态方法, 方法返回静态类属性

 

饿汗式单例

立即加载,就是当你当你使用这个类的时候这个类已经创建好了,反正会提前你一步把这个类创建出来,不管你有没有使用! 缺点就是如果你不使用这个类的话那就白创建了这个类了,浪费内存存储他,  优点就是当你要使用它的时候,他已经给你创建好了,不需要你花时间等待他创建!

public final class Single {

    // 直接创建出了这个对象
    private final static Single single = new Single();

    // 私有构造器,保证不能有第二个对象出来
    private Single(){}

    // 一个公开方法专门返回该对象出去
    public final static Single getInstance(){
        return single;
    }

}

 

懒汉式单例

懒汉式单例就是等你需要调用到这个对象的时候他才给你创建,优点是需要的时候才创建,不需要的时候不会创建出来,相比饿汗式单例就是给你省了一点内存,缺点是你需要的时候才给你创建,需要你等待他创建出来你才能调用,下面的代码只适合单线程程序使用,如果多线程的话会出现一个问题,那就是几个线程同时调用这个方法,然后发现对象是null,就会创建多个对象出来

public final class Single {

    private static Single single;

    // 私有构造器,保证不能有第二个对象出来
    private Single() {
    }

    // 一个公开方法专门返回该对象出去
    public final static Single getInstance() {
        if (single == null) {
            single=new Single();
        }
        return single;
    }

}

多线程的写法就是加上线程安全关键字,如下

public final class Single {

    private static Single single;

    private Single() {}

    public final static Single getInstance() throws InterruptedException {
        // 第一次检查instance是否被实例化出来
        if (single == null) {
            synchronized (Single.class){
                // 第二次检测,要不然还是会new出多个对象出来
                if(single == null){
                    single=new Single();
                }
            }
        }
        return single;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值