Одиночный шаблон - это шаблон создания объекта, который гарантирует, что в системе есть только один экземпляр класса.
На языке Java есть два преимущества для этого:
1. Для часто используемых объектов время, потраченное на создание объектов, может быть опущено;
2. Из -за уменьшения количества новых операций частота использования системной памяти снижается, что снижает давление GC и сокращает время для паузы GC.
Одиночная сегментация рисунка:
1
открытый класс Singleton {private singleton () {System.out.println ("singleton.singleton ()"); } Частный статический Singleton Singleton = new Singleton (); public static singleton getInstance () {return singleton; }}Примечание. Во -первых, класс Singleton должен иметь конструктор на личном уровне доступа, чтобы гарантировать, что Singleton не создается другим системным кодом; Во -вторых, метод члена Singleton и метод GetInstance () должен быть статичным.
Этот класс Singleton очень прост в создании и очень надежен. Единственным недостатком является то, что Синглтон не может быть загружен на ладонь. Например, поскольку процесс создания синглтона очень медленный, а переменная элемента определяется как статическая, когда JVM загружает класс Singleton, также будет создан объект Singleton. Затем, объект Singleton будет создан везде, где используется класс Singleton, независимо от того, используется ли объект Singleton. Например:
открытый класс Singleton {private singleton () {System.out.println ("singleton.singleton ()"); } Частный статический Singleton Singleton = new Singleton (); public static singleton getInstance () {return singleton; } public static void createstring () {System.out.println ("singleton.createstring ()"); }} 2. Чтобы улучшить скорость вызова связанных функций, необходимо ввести ленивый механизм загрузки.
пакет com.luchao.singtonle; public class lazysingleton {private lazysingleton () {System.out.println ("lazysingleton.lazysingleton ()"); } Частный статический Lazysingleton LazyInstance = null; Публичный синхронизированный статический lazysingleton getInstance () {if (lazyInstance == null) lazyInstance = new Lazysingleton (); вернуть ленивый; }}Статическое назначение инициализации инициализации с переменной является нулевым, гарантируя, что при запуске система не будет дополнительной нагрузки. В методе GetInstance () определяется, что текущий экземпляр уже существует. Если он существует, он возвращается. Если его не существует, создается синглтон. getInstance () должен быть синхронным методом, потому что в многопоточной среде, когда поток 1 строит синглтон, и до завершения назначения поток 2 может определить, что экземпляр нулю, поэтому поток 2 запустит программу для создания нового Singleton, в результате чего создается несколько синглтонов.
Приведенный выше пример реализации Singleton реализует отсроченную загрузку, но вводит метод синхронизации, который занимает гораздо больше времени, чем первая программа Singleton в многопоточной среде.
3. Singleton Pattern использует внутренние классы для поддержания создания синглетонов
открытый класс statsicingleton {private statsicingleton () {System.out.println ("statsicingleton.staticsingleton ()"); } Частный статический класс Singletonholder {Private Static Statsicingleton Ataticsingleton = new Statsicingleton (); } public StaticsingLeton getInstance () {return singletonholder.ataticingleton; }}При загрузке Statsicingleton, внутренний класс не будет создан экземпляр, гарантируя, что класс Синглтона не будет инициализирован, когда класс статитики в течение статитики загружается в JVM, и одновременный держатель загружается при вызове метода getInstance (), тем самым инициализации экземпляра. Он также используется для создания экземпляров при загрузке класса, поэтому он естественно удобен.
Использование внутренних классов для завершения однокоммерческого режима может не только достичь отсроченной загрузки, но и использовать синхронные ключевые слова. Это относительно полный подход.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения.