聊聊单例类

作者: 童以默 | 来源:发表于2016-11-12 21:32 被阅读22次

所谓单例设计模式,从字面理解就是,单就是一个,例是实例(即是对象),类就是类,就是一个类中只有一个实例就是单例。下面从一个例子看看具体什么是单例:

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

public class SingletonTest
{
    public static void main (String [ ] args )
      {
          Singleton s1 = Singleton.getInstance();
          Singleton s2=Singleton.getInstance();
          System.out.println(s1==s2);      //输出结果为ture
      }
}
怎么样才能保证只存在一个实例(对象)呢?

这就要说到实例的创建,创建实例需要用到创建该实例的构造器(也有翻译成构造函数的)。如果没有没有构造器,就无法创建实例,所以我们要控制创建实例的构造器也就间接的控制住了创建实例。那么怎么才能控制构造器呢?我们的做法就是把构造器隐藏起来,别人找不到就无法创建实例。所以在本例中private Singleton(){}你看到构造器前面进行了私有化。这样子就达到别人无法调用我的构造器,因此就不可以创建实例。

既然别人无法创建实例,我就要创建一个实例给别人使用,我该怎么做呢?

我要做的是,我对外提供一个方法,别人通过调用该方法,还回一个实例。调用方法只有两种方式:一是通过对象调用,二是通过类名调用。由于别人无法创建对象,所以只可以通过类名调用。要用类名调用,因此该方法要定义成静态方法。如果别人调用该方法,我还回一个实例对象,当第二次调用该方法时,内存中已经存在该对象,就不在还回实例,因此方法内要有一个判断,防止多次调用的情况。本例中就是通过getInstance()静态方法进行还回一个对象,通过这种操作,就可以保证对象的唯一性。

本例中虽然两次调用getInstance()方法,但是由于进行了if判断,内存中有对象将不再创建对象,没有对象才会创建。最后从程序运行结果可以看出,内存中确实只有一个对象。

总结:要点有两点
1对构造器私有,不让比别人创建对象
2提供一个方法还回一个对象,并进行条件判断保证对象唯一

相关文章

  • 聊聊单例类

    所谓单例设计模式,从字面理解就是,单就是一个,例是实例(即是对象),类就是类,就是一个类中只有一个实例就是单例。下...

  • 第3章 创建型模式-单例模式

    ■ 饿汉式单例类 ■ 懒汉式单例类 ■ 单例模式的实例

  • 单例模式

    特点 单例类只有1个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单例的全局访问点 结构 单例...

  • 单例模式

    1. 什么是单例模式? 创建单例类的方法叫单例模式. 单例类, 就是只能产生一个对象的类. 2. 为什么使用单例模...

  • 单例模式

    一、定义与特点 单例模式的特点 单例类只有一个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单...

  • OC - 单例模式

    导读: 一、什么是单例模式 二、单例的作用 三、常见的单例类 四、自定义单例类的方法 一、什么是单例模式 单例模式...

  • 设计模式(单例模式)

    单例模式 单例模式有以下特点: 单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象提...

  • Unity3D-单例类Instance

    今天介绍Unity中所有使用的单例类 万能单例类 雨落随风提供单例类

  • Kotlin中的单例实现原理

    1.使用Object关键字进行单例类声明 2.单例类的使用 3. 单例类的实现原理

  • 单例模式

    什么是单例模式? 一个类只允许创建一个实例,那个类就是单例类。这个模式就是单例模式。单例模式实现方式:饿汉式:实现...

网友评论

    本文标题:聊聊单例类

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