Концепция картины Singleton:
Синглтонский рисунок в Java - общий дизайн. Синглтонский рисунок разделен на три типа: Lazy Singleton, Hungry Singleton и зарегистрированный Singleton.
Синглтонский режим имеет следующие характеристики:
1. В классе Синглтона может быть только один экземпляр.
2. Класс Синглтона должен создать свой собственный уникальный экземпляр.
3. Класс Синглтона должен предоставить этот экземпляр всем другим объектам.
Одиночный паттерн гарантирует, что у класса есть только один экземпляр, и создает его сам и предоставляет этот экземпляр всей системе. В компьютерных системах объекты драйверов для пулов потоков, кэши, объектов журнала, диалоговых окно, принтеров и графических карт часто разработаны как синглтоны. Эти приложения имеют более или менее функциональность менеджера ресурсов. Каждый компьютер может иметь несколько принтеров, но может быть доступен только один капул принтера, чтобы избежать двух заданий для печати одновременно. Каждый компьютер может иметь несколько портов связи, и система должна централизованно управлять этими портами связи, чтобы избежать одного порта связи одновременно двумя запросами. Короче говоря, выбор модели синглтона - это избегать противоречивых государств и избежать политической быстрой.
Во -первых, давайте посмотрим на классическую реализацию Синглтона.
Public Class Singleton {Private Static Singleton UniqueInstance = null; private singleton () {// существует только для того, чтобы победить экземпляры. } public static singleton getInstance () {if (uniqueInstance == null) {уникальный instance = new Singleton (); } вернуть уникальный instance; } // другие методы ...}Singleton избегает создания класса извне, ограничивая конструктор частным. В той же сфере виртуальной машины можно получить единственный экземпляр Синглтона только с помощью метода getInstance (). (Фактически, благодаря механизму отражения Java вы можете создать экземпляр класса с частной конструкцией, которая в основном недействительна все реализации Java Singleton. Эта проблема не будет обсуждаться здесь, и я подумаю, что механизм отражения не существует.)
Тем не менее, вышеуказанная реализация не учитывает проблемы безопасности потока. Безопасность потока: если ваш код находится в процессе, когда несколько потоков работают одновременно, и эти потоки могут запускать этот код одновременно. Если результат каждого прогона совпадает с результатом запуска одного потока, а значения других переменных одинаковы, как и ожидалось, он безопасен для потока. Другими словами: интерфейс, предоставленный классом или программой, является атомной операцией для потока, или переключение между несколькими потоками не приведет к неоднозначности для результата выполнения интерфейса, то есть нам не нужно рассматривать проблему синхронизации. Очевидно, что вышеуказанная реализация не соответствует требованиям безопасности потоков, и несколько экземпляров синглтона, вероятно, появятся в одновременной среде.
открытый класс TestStream {private String name; public String getName () {return name; } public void setName (string name) {this.name = name; } // Этот класс может иметь только один экземпляр private teststream () {} // private non-argument constructor // Этот класс должен быть создан сам по себе // Существует 2 способа/*частное статическое окончательное конечное тестирование = new TestStream ();*/private Static TestStream TS1 = null; // Этот класс должен автоматически предоставить объект этого экземпляра всей системе Public Static State TestStream getTest () {if (ts1 == null) {ts1 = new teststream (); } вернуть TS1; } public void getInfo () {System.out.println ("Выходное сообщение"+name); }} public Class Testmain {public static void main (string [] args) {teststream s = teststream.getTest (); S.SetName ("Чжан Сяосианг"); System.out.println (s.getName ()); Teststream s1 = teststream.getTest (); S1.SetName ("Чжан Сяосианг"); System.out.println (s1.getName ()); s.getinfo (); s1.getInfo (); if (s == s1) {System.out.println («Тот же экземпляр был создан»); } else if (s! = s1) {System.out.println ("Создано не один и тот же экземпляр"); } else {System.out.println ("Ошибка приложения"); }}}}Результаты работы:
Чжан Сяосиан Чжан Сяосианг
Выходное сообщение Zhang Xiaoxiang
Выходное сообщение Zhang Xiaoxiang создал тот же экземпляр
Заключение: Из результатов мы видим, что шаблон Singleton предоставляет объектно-ориентированное приложение с уникальной точкой доступа для объекта. Независимо от того, какая функция он реализует, все приложение будет делиться объектом экземпляра.
1. Голодный Синглтон
// Голодный Синглтон Класс. При инициализации класса, открытый класс Singleton1 был создан сам по себе {// Private Constructor Private Singleton1 () {} // Добавить частный статический финал Singleton1 Single = new Singleton1 (); // Статический фабричный метод public static singleton1 getInstance () {return сингл; }} 2. Lazy Singleton Class
// Западный класс Синглтона. Создать общедоступный класс Singleton2, когда называется первым открытым классом Singleton2 {// Private Constructor Private Singleton2 () {} // Обратите внимание, что нет окончательного частного статического Singleton2 Single = null; // Статический фабричный метод публичный синхронизированный статический singleton2 getInstance () {if (single == null) {single = new singleton2 (); } вернуть сингл; }} 3. Зарегистрированный класс синглтона
импортировать java.util.hashmap; импортировать java.util.map; // Зарегистрированный класс Синглтона. // Аналогично методу весной, зарегистрируйте имя класса и получите его непосредственно от него в следующий раз. открытый класс Singleton3 {Private Static Map <String, singleton3> map = new Hashmap <String, singleton3> (); static {singleton3 single = new singleton3 (); map.put (single.getClass (). getName (), single); } // Защищенный конструктор по умолчанию защищенный Singleton3 () {} // Статический фабричный метод вернуть уникальный экземпляр этого класса. System.out.println ("name == null"+"---> name ="+name); } if (map.get (name) == null) {try {map.put (name, (singleton3) class.forname (name) .newinstance ()); } catch (instantiationException e) {e.printstacktrace (); } catch (allogalaccessexception e) {e.printstacktrace (); } catch (classnotfoundexception e) {e.printstacktrace (); }} return map.get (name); } // Схематический коммерческий метод публичной строки About () {return "Привет, я Регсинглтон."; } public static void main (string [] args) {singleton3 single3 = singleton3.getinstance (null); System.out.println (single3.about ()); }} Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.