单例模式

单例模式介绍:http://www.runoob.com/design-pattern/singleton-pattern.html

单例模式就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。

通常我们可以定义全局变量访问同一个对象,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。

public class Singleton {
    private static Singleton instance;
    private Singleton(){}
    
    public static Singleton getInstance(){
        if(instance==null){
            instance = new Singleton();
        }
        return instance;
    }
}

测试代码。

public class Test {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        if(s1==s2){
            System.out.println("两个对象是相同的实例!");
        }
    }
}

输出结果:两个对象是相同的实例!

单例模式因为Singleton类封装它的唯一实例,这样他可以严格地控制客户怎样访问它以及何时访问它。简单地说就是对唯一实例的受控访问。

单例类和java封装的工具类有什么区别?

相同点:java封装的工具类也会采用私有化的构造方法来避免其有实例。

不同点:

1、java封装的工具类不保存状态,仅提供一些静态方法或者静态属性供其他类调用。而单例类是有状态的。

2、java封装的工具类不能用于继承多态,而单例类虽然实例唯一,却可以有子类来继承。

3、java封装的工具类只不过是一些方法属性的集合,而单例类却有着唯一的对象实例。

多线程时的单例

多线程的程序中,同时访问Singleton类,调用GetSingleton()方法,可能创建多个实例。此时可以给线程加锁来处理。

原文地址:https://www.cnblogs.com/jwen1994/p/9985360.html