[设计模式] - No.8 Singleton模式

Singleton模式

在程序运行的时候常常是使用new的方法创建一个实例。对于某一个类(例如工具类),如果我们希望在任何情况下该类只有一个实例的话,我们需要使用单例模式。单例模式是很简单又被广为使用的一个设计模式:

public class Singleton {

    //饿汉模式
    private static Singleton singleton = new Singleton();
    private Singleton(){
        System.out.println("生成唯一的实例");
    }

    public static Singleton getSingleton(){
        return singleton;
    }
}

在程序运行时,当Singleton首次被加载的时候,我们即创建了一个singleton对象。当getSingleton函数被调用的时候,我们将这个对象的引用返回给外部调用。这样的话,不管调用多少次,getSingleton函数返回的总是类加载时创建的singleton对象。

可使用Main中的函数判断两个实例是否为同一个对象:

public class Main {

    public static void main(String[] args) {
        Singleton s1 = Singleton.getSingleton();
        Singleton s2 = Singleton.getSingleton();
        System.out.println(s1==s2?"s1 和 s2 相同":"s1 和 s2 不相同");
    }
}

生成唯一的实例
s1 和 s2 相同

上面的方法又被称为饿汉模式,因为他总是在类刚刚加载的时候即创建实例对象。还用一种单例的实现方式被称为懒汉模式,实现如下:

public class Singleton {
    //懒汉
    private static Singleton singleton =null;
    private Singleton(){
        System.out.println("生成唯一的实例");
    }
    public synchronized static Singleton getSingleton(){
        if(singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

可以看到,与饿汉模式不同的是,懒汉模式在最初是的时候仅仅创建一个null的空引用,当首次调用getSingleton的时候,由于singleton的引用为空,所以会创建一个新的实例对象。在后续调用的时候,都只返回这一个实例即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值