2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Когда приложению необходимо управлять общим доступом к ресурсам, выполнять управление конфигурацией и операции записи журнала, общим требованием является использование глобальной точки доступа, чтобы программа могла получить к ней доступ через эту глобальную точку доступа независимо от того, где она находится. соответствующую информацию об экземпляре. Чтобы удовлетворить эту потребность, мы можем использовать шаблон Singleton. Шаблон Singleton гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа для доступа к этому экземпляру.
В частности, шаблон Singleton обычно предоставляет статический метод (например, getInstance()), который возвращает единственный экземпляр класса. Поскольку этот метод статический, его можно вызвать без создания экземпляра класса. Это означает, что любой код, имеющий доступ к классу, может получить экземпляр Singleton, вызвав этот статический метод.
В этой статье будут подробно представлены основные концепции и этапы реализации шаблона Singleton. Благодаря этой статье вы сможете понять, как работает шаблон Singleton, и научиться эффективно использовать его в реальных проектах.
В качестве интересного примера можно привести модель синглтона, подобную ореолу главного героя в мире аниме. Независимо от того, как развивается сюжет, всегда есть только один главный герой, и все знают, что он является ядром истории. Таким образом, независимо от того, как разворачивается история, каждый сможет найти одного и того же человека, который будет продвигать сюжет вперед.
преимущество
Обеспечьте единый экземпляр: Избегайте дублирования создания экземпляров и экономьте ресурсы.
глобальная точка доступа: Удобный глобальный доступ и упрощенные вызовы.
Ленивая инициализация: создавайте экземпляры по требованию для повышения производительности.
недостаток
Трудно масштабировать: Классы-одиночки часто сложно расширить, поскольку их конструктор является закрытым.
потенциальные проблемы с производительностью: В среде с высоким уровнем параллелизма некоторые реализации могут иметь проблемы с производительностью.
Сложность в тестировании: шаблон Singleton может затруднить тестирование, поскольку это глобальное состояние.
По характеристикам паттерна синглтон сценарии его использования можно разделить на следующие категории:
Реализация паттерна синглтон обычно включает в себя три элемента:
- частный конструктор, сделайте конструктор класса закрытым, чтобы внешний объект не мог создать экземпляр с помощью нового ключевого слова.
- Частные статические опорные точки для собственного экземпляра, создайте статическую переменную экземпляра внутри класса, чтобы сохранить уникальный экземпляр.
- Публичные статические методы, возвращающие собственный экземпляр., предоставьте статический метод, чтобы внешний мир мог получить единственный экземпляр с помощью этого метода.
В режиме Singleton в стиле Hungry экземпляр Singleton создается при загрузке класса, что является потокобезопасным, поскольку статический объект создается при загрузке класса, а скорость ответа при вызове высокая. Недостаток также очевиден: эффективность использования ресурсов невысока, пока выполняются другие статические методы класса или загружается класс, этот экземпляр все равно будет инициализирован.
/**
* 饿汉单例模式:在还没有实例化的时候就初始化
*/
public class Hungry {
//1. 开始时就创建实例
private static final Hungry instance=new Hungry();
// 2. 私有化的构造方法
private void hungry() {
}
public static Hungry getInstance() {
// 返回单例名
return instance;
}
}