Подтвердить что ты не робот

Должен ли синглтон Java использовать статические переменные?

Должен ли синглтон в Java использовать статические переменные или переменные-члены? Есть ли какие-либо преимущества или?

4b9b3361

Ответ 1

Вы должны использовать переменные-члены. Синглтон - это объект (т.е. Экземпляр класса) и поэтому должен быть смоделирован как таковой; даже если вы только когда-либо собираетесь создать один из них.

Статичность должна использоваться для переменных уровня класса.

Ответ 2

Должна быть статическая ссылка на экземпляр singleton, но сам экземпляр должен использовать переменные экземпляра, как обычный класс.

Причина в том, что экземпляр singleton - это, в конце концов, объект, поэтому обычные классные принципы дизайна все еще применяются к его классу.

Кроме того, сегодня это singleton, но завтра это может быть ThreadLocal, или не имеют каких-либо ограничений на создание экземпляра. Изменение между этими архитектурными вариантами очень низкое, если класс разработан обычным способом. Если вы используете статические поля, для таких изменений потребуется больше работ по техническому обслуживанию, чтобы сделать поля нестатичными.

Ответ 3

Вы можете избежать использования статических переменных и вместо этого использовать Enum:

public enum MySingleton {
    INSTANCE;
}

Вы можете получить доступ к этому синглтону как MySingleton.INSTANCE.

Enum является потокобезопасным, а реализация Singleton through Enum гарантирует, что ваш singleton будет иметь только один экземпляр даже в многопоточной среде.

Ответ 4

Нет мандата на использование статических переменных или переменных-членов. Поскольку singleton будет иметь только один экземпляр так логически, использование статической или членной переменной не имеет никакого значения. Кроме того, статическая и переменная разности переменных экземпляра, статические переменные будут инициализированы во время загрузки класса, но переменные экземпляра будут инициализированы во время создания экземпляра.

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

Ответ 5

Не обязательно использовать статические переменные. Вы также можете использовать перечисление

см. this

Ответ 6

Это зависит от конкретной переменной. Определенно, наиболее распространенным явлением является то, что singleton является обычным объектом, который содержит переменные-члены. Например, вы можете легко заменить один объект другим (со всеми другими свойствами).

Каждый класс может иметь статические переменные, но он не депонирует, что он однотонный или нет.

Шаблон Singleton по своей природе относится к экземпляру объекта. Статика - это класс классов → нет отношения к одноэлементному шаблону.

Ответ 7

Много информации уже задано: используйте статические переменные или статические переменные, указывающие на ваш экземпляр, или используйте перечисление.

Большая разница заключается в том, что ваша одна тонна является членом класса, который является подклассом другого класса.

Следовательно, ваш экземпляр singleton наследуется от суперкласса.

Это может иметь огромное преимущество.

Перечислениям не разрешается расширять друг друга, но вы можете использовать перечисление, которое реализует интерфейсы.