Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Почему static singleton - плохо? И какие есть пути решения

Метки:
Теги Теги
1.19.2 java paper

neverlessy

Новичок
Пользователь
Баллы
21
Имя в Minecraft
neverlessy
Вопрос в шапке. Все таки интересно какие есть еще удобные варианты получения экземпляра плагина.

Слышал про dependency injection и даже работал, но как по мне занимает много места. Мне говорили, что лучше всего использовать сериализацию и десериализацию. Покажите как это можно сделать

(я не профи, в таких моментах я дуб: Дерево хвойное, просто расскажите почему надо так и почему не надо так, как это влияет на производительность и т.д)
 
Последнее редактирование:
Статичный синглтон сам по себе не является каким-то абсолютным злом, но зачастую используется неправильно и порождает много проблем со структурой проекта, которые позже придется долго и упорно искоренять.
Стоит отметить, что экземпляр плагина в виде синглтона, на самом деле, скорей даже правильное его использование, но там есть проблемы с поддержкой такого варианта в будущем, особенно если соберешься расширять API проекта.
В крайнем случае всегда можно использовать JavaPlugin.getPlugin(MyPlugin.class), хотя выглядит это очень некрасиво. Если нужен экземпляр третьего плагина, лучше через getServer().getPluginManager() (метод getServer() доступен у экземпляра твоего плагина; кроме того, класс Bukkit статично копирует каждый метод класса Server).
Слышал про dependency injection и даже работал, но как по мне занимает много места.
Зато стабильно. Можешь, конечно, посмотреть в сторону фреймворков вроде Guice, но нужно учесть - постоянно создавать объекты с ним будет тяжело для сервера, но на включении плагина, или с какой-то большой периодичностью - проблем не будет. Ну, и вес итогового плагина увеличится (если только не будешь использовать libraries в plugin.yml)
Мне говорили, что лучше всего использовать сериализацию и десериализацию. Покажите как это можно сделать
Не знаю, к чему это, если честно. Сериализация - процесс конвертации объекта в сохраняемый формат (байты, текст); десерализация, соответственно, сборка такого объекта обратно из байтов.
как это влияет на производительность
На производительность как правило влиять не должно (если не пользоваться фреймворками, опять же).
 
Последнее редактирование:
Хочу внести свою лепту
Кратко: Сингелтон считают анти-патерном потому что из за него очень трудно понять какой объект где используется, и из за этого сложнее простроить качественную структуру программы, если ты на начальной стадии изучения программирования то не стоит сейчас об этом задумывается, но вот если строить большую программу то уже не обойтись без правильной структуры и так далее
Если структура программы качественно продумана то ее будет легко масштабировать(Дописывать чтото новое),
 
Всем спасибо
Не знаю, к чему это, если честно. Сериализация - процесс конвертации объекта в сохраняемый формат (байты, текст); десерализация, соответственно, сборка такого объекта обратно из байтов.
Вроде слышал, что так тоже можно получать экземпляр класса, скорее всего я что-то напутал или мне приснилось, странно

upd: да, перепутал понятия, почему-то запомнилось как "сериализуемый главный класс" :mad:
upload_2022-11-14_9-7-31.png
 

Поделиться этой страницей

Назад
Верх