我不明白单身人士班的概念

时间:2018-12-15 17:59:33

标签: java singleton

我知道如何在Java中制作单例类,但我不明白的是单例的概念。就像为什么我需要单身人士课程,为什么我要使用单身人士而不是常规课程?

  

“ Singleton模式限制了类的实例并确保   Java虚拟中仅存在该类的一个实例   机器。”

我只是读过该定义,但我不明白,如果有一个或多个类的实例,它会发生什么变化。 为什么我只想拥有一个类的一个实例。

3 个答案:

答案 0 :(得分:0)

当您只需要一个类的一个实例时,整个应用程序就会共享它们。

该原理的好例子是负责访问外部资源的类。例如,您希望整个应用程序共享相同的数据库连接(或至少共享连接池),而不是让每个需要它的类都打开自己的连接。

答案 1 :(得分:0)

字母是具有可在相同上下文中与其他类共享的属性的类。 (应用程序,会话等) 例如,如果您必须计算Web应用程序中的已连接用户数。每次用户连接时,您都会在唯一的共享类中增加一个计数器。

答案 2 :(得分:0)

在某些情况下,我们需要在整个应用程序中公开共享资源,例如数据库连接,但我们不想

  1. 先创建共享对象(在创建客户端对象之前)。
  2. 将共享对象明确传递给每个客户端对象。

然后我们可以使用Singleton设计模式。

典型的Singleton类看起来像

public class MySingleton {
      private MySingleton INSTANCE
      private MySingleton() {
      }

      public static MySingleton getInstance() {
       if (INSTANCE == null) {
         syncronized (MySingleton.class) {
           if (INSTANCE == null) {
             INSTANCE = new MySingleton();
           }
         }
       }
       return INSTANCE;
      }
     // instance methods exposing business operation
    }

但是我们可以通过使每个实例方法(将业务操作公开为静态)来实现类似的行为。在这种方法中,我们甚至不需要创建单个对象。
那我们为什么需要Singleton?
好吧,答案很简单。与客户端隔离实际的实现。基本上,我们在这里应用抽象 OOP原理。
如果单例类是供各种客户端使用的库的一部分,并且库希望根据客户端更改实现,则这很有用。

此类单例的样本可以是

public class MySingleton {
      private MySingleton INSTANCE
      private MySingleton() {
      }

      public static MySingleton getInstance() {
       if (INSTANCE == null) {
         syncronized (MySingleton.class) {
           if (INSTANCE == null) {
             INSTANCE = new MySingletonChild(); // here we are creating an object of subclass of MySingleton.
           }
         }
       }
       return INSTANCE;
      }
     // instance methods exposing business operation
    }

希望这有助于理解Singleton设计模式。