Что лучше использовать: синглтон или статический утилитарный класс?
1,00
р.
р.
Столкнулся с задачей, которую в равной степени можно решить двумя способами. Класс, допустим DeviceState обращается к устройству десятки раз в секунду, поэтому каждый раз создавать экземпляр не вариант. Нужно использовать или синглтон или сделать класс статическим. И так и так работает. Не могу определиться с выбором. По удобству, вроде как, статический выигрывает. Есть ли какая-то разница по памяти и в быстродействии? /ingleton DeviceState ds = ModbusMaster.getDeviceState() //там происходит return DeviceState.getInstance(connParams) System.out.println(ds.getLedState()) //full static DeviceState.refreshData() System.out.println(DeviceState.ledState)
Ответ Думаю, в вашем случае лучше всё-таки использовать синглтон. Вот хорошая статья на эту тему: Если Ваш синглтон не поддерживает ни одного состояния, а просто обеспечивает доступ к методам, лучше рассмотреть использование статического класса, так как статические методы гораздо быстрее синглтона, благодаря статичному связыванию во время компиляции. Если по Вашим требованиям необходимо поддержать состояние, то в таком случае синглтон является лучшим выбором, чем статический класс, потому что поддержание состояния в последнем случае — кошмар, и ведет к неочевидным ошибкам. А так как у вас сам класс называется DeviceState, думаю, он должен поддерживать разные состояния, значит, нужен синглтон. Что касается производительности: Статический класс предоставляет большую производительность, чем синглтон, потому что статические методы связываются во время компиляции. Но думаю, что особенной разницы в производительности вы не заметите, а стилистически правильнее будет использовать синглтон.