Я не понимаю концепцию синглтон-класса - PullRequest
0 голосов
/ 15 декабря 2018

Я знаю, как создать синглтон-класс в Java, но что я не понимаю, так это концепция синглтона.Например, зачем мне нужен одноэлементный класс и почему я бы использовал одноэлементный класс вместо обычного класса?

"Шаблон Singleton ограничивает создание экземпляров класса и гарантирует, что в нем существует только один экземпляр класса.виртуальная машина Java. "

Я только что прочитал это определение, но я не понимаю, что он изменит, если есть один или несколько экземпляров класса.Почему я хочу иметь только один экземпляр класса.

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

Синглтоны - это классы со свойствами, которые можно использовать совместно с другими классами в том же контексте.(Приложение, сеанс, ...) Например, если вам нужно подсчитать количество подключенных пользователей в веб-приложении.Каждый раз, когда пользователь подключается, вы увеличиваете счетчик в уникальном общем классе.

0 голосов
/ 15 декабря 2018

В некоторых случаях нам необходимо предоставить общий ресурс во всем приложении, например, соединение с БД, но мы не хотим

  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
    }

Но мы можем добиться аналогичного поведения, создав методы каждого экземпляра, которые представляют бизнес-операции как статические.При таком подходе нам даже не нужно создавать отдельный объект.
Тогда зачем нам нужен синглтон?
Ну, ответ прост.Выделить фактическую реализацию от клиента.В основном мы применяем принцип abstraction 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.

0 голосов
/ 15 декабря 2018

Синглтоны используются, когда вам нужен ровно один экземпляр класса, который разделяет все приложение.

Хорошими примерами этого принципа являются классы, отвечающие за доступ к внешним ресурсам.Например, вы хотите, чтобы все приложение совместно использовало одно и то же соединение с базой данных (или, по крайней мере, пул соединений), а не каждый класс, для которого оно требуется, открывало свое собственное соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...