美文网首页
Java中如何创建单例类(Singleton)

Java中如何创建单例类(Singleton)

作者: cuzz_ | 来源:发表于2018-04-02 22:34 被阅读0次

大部分时候都把类的构造器定义为public,允许任何类自由的创建该类的对象。但在某些时候,允许其他类自由创建的对象没有意义,还有可能造成系统的性能下降(因为频繁的创建对象、回收对象带来的系统开销问题)。

如果一个类始终只能创建一个实例,则这个类被称为单例类。

在一些特殊的场合下,要求不予许资自由创建该类的对象,而只允许为该类创建一个对象。为了避免其他类自由的创建该类的实例,应该吧该类的构造器使用private修饰,从而把该类的所有的构造器隐藏起来。

根据良好的封装原则:一旦该类的构造器被隐藏起来,就需要提供一个public方法作为该类的访问点,用于创建该类的对象,且该方法必须使用static修饰(因为调用该方法之前还不存在对象,因此调用该方法的不可能是对象,只能是类)。

除此之外,该类还必须缓存已经创建好的类,否则该类复发知道是否已经创建过对象,也就无法保证只创建一个对象。我们需要使用一个成员变量来保存曾经创建好的对象,因为该成员变量需要被上面的静态方法访问,故也必须使用static修饰。

Singleton类:

public class Singleton {
    // 使用一个变量来缓存已经创建的实例
    private static Singleton instance;
    // 对构造器使用private修饰 隐藏构造器
    private Singleton(){}
    // 提供一个静态方法  返回Singleton实例
    public static Singleton getInstance(){
        // 如果为null 表明还没有创建Singleton对象
        if (instance == null) {
            // 创建对象
            instance = new Singleton();
        }
        
        return instance;
    }   
}

测试类:

public class SingletonTest {
    public static void main(String[] args) {
        // 创建Singleton对象不能通过构造器
        // 只能通过getInstance方法得到实例
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1 == s2);  // 输出 true
    }
}

正式通过上面的getInstance方法提供的自定义的控制(这也是封装的优势:不允许自由的访问的成员变量和实现的细节),保证Singleton类只能产生一个实例。

相关文章

  • Java中如何创建单例类(Singleton)

    大部分时候都把类的构造器定义为public,允许任何类自由的创建该类的对象。但在某些时候,允许其他类自由创建的对象...

  • Java几种单例模式的实现

    Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类...

  • Java -- 单例设计模式

    Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类...

  • java的单例模式——其实很简单

    Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类...

  • 单例模式学习

    Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类...

  • 单例模式

    3、单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象...

  • 设计模式-单例模式(Singleton)

    单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保...

  • 《单例模式》

    制作 1.静态变量只会在内存中存在一个 2.创建单例类Singleton,将 New Singleton()放在类...

  • 一天一个设计模式(二) -单例模式(Singleton)

    前言 单例模式 (Singleton) 是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,...

  • 设计模式一(五种单例模式)

    【单例模式】Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生...

网友评论

      本文标题:Java中如何创建单例类(Singleton)

      本文链接:https://www.haomeiwen.com/subject/ksffhftx.html