Singleton - антипаттерн? Паттерны проектирования [RU, Android] / Мобильный разработчик
HTML-код
- Опубликовано: 15 окт 2018
- Всем привет. Продолжаем разбирать шаблоны проектирования. И поговорим о самом популярном шаблоне (или антишаблоне?) проектирования - Singleton (Одиночка). Посмотрим, где применяется, как создается, плюсы и минусы
Мобильный разработчик в других соц. сетях
=======================
Вконтакте - mdeveloper
Instagram - / nplau
=======================
Наши друзья и информационные партнеры:
t.me/androidev - Телеграмм канал, посвященный разработке для Андроид!
Поддержать канал рублем:
PayPal - alexgladkov@icloud.com
Mastercard - 5536 9137 9985 0652
Статья на хабрхабр о создании Singleton - habr.com/post/129494/
Ставь лайк, подписывайся и пиши, чтобы ты хотел увидеть в следующих видео.
Поддержать канал рублем:
PayPal - alexgladkov@icloud.com
Mastercard - 5486 7320 6639 0634
Если вам интересна тема паттернов проектирования - пишите в комментариях я все читаю и анализирую
Да, это интересно!
Спасибо ))
Пасибо вам за ваши труды , очень интересно про паттерны проектирования
Четко! Очень хорошо объясняете. Спасибо большое. Хотелось бы больше выпусков от Вас и особенно больше паттернов)
Спасибо )) про паттерны как-то забросил, но надо вернуться к ним )
интересно, особенно самые испльзуемые
отличный урок! спасибо!
Пожалуйста )
Очень приятный урок, всё понятно, приятная речь. Отдельный лайк за Ведьмака)
Спасибо большое)) Ведьмака люблю с детства еще когда книги прочитал )
и за доту кст!))
Доту тоже люблю))
Очень интересно рассказываете) Поражаюсь, почему у вас так мало подписчиков, у вас лучший канал по мобильной разработке!
Вопрос по паттерну
Правильно ли будет его использовать для класса с настройками приложения и для класса с данными о юзере (ФИО, мб очки опыта, уровень и тд)?
Спасибо ) вы можете помочь каналу сделав везде репосты видео )
Смотрите, главное чтоб синглтон не имел накалываемых состояний. То есть f(x) вначале приложения абсолютно равен f(x) через два часа/дня/недели работы приложения ) где f ваш синглтон а x приложение )
@@MobileDeveloper то есть в моем случае лучше не использовать? Потому что у меня у юзера будет меняться опыт и уровень и соответственно f(x) в один момент времени != f(x) в другой момент, плюс он в настройках может ФИО поменять. А как тогда лучше хранить эти данные?
Разные способы есть. Можно в sharedpreferences, можно в room ) можно на сервере. Все от задачи зависит
@@MobileDeveloper огромное спасибо! Помогли избежать ошибки) Чуть не начал делать через синглтон)
Если используется ленивая инициализация, как в видео - то такая реализация не потокобезопасная.
Лучше для новичков показать сразу примеры лучших практик, типа двойной проверки на null, типа:
if(instance == null) { syncronize { if(instance == null) { instance = new Singleton() } } } return instance
Иначе насоздаете экземпляров с разных потоков и будете работать с разными объектами а не с одним синглтоном. Либо, как уже было сказано - использовать Enum(в java). В остальном - как всегда лайк!
Тут да вы абсолютно правы ) самая лучшая реализация это через enum ))
Отличное видео, давно вы его сняли, но думаю, что мой простой вопрос не заведёт вас в тупик, можно ли было не создавать новый объект Singletona (то есть не через new, а написать instance = this, то есть самому этому классу? Спасибо.
Там же статическая функция. Вам даже компилятор не даст так сделать
В kotlin есть классы с глобальным доступом (object), что лучше использовать их или getInstance? В чём разница?
Можно ли хранить список пользователей в синглтоне? К примеру List
Смотря для чего вы хотите это сделать. Но вообще я бы не рекомендовал для большинства задач которые мне в голову приходят. Вам тяжело потом будет этот список хендлить. Его можно там хранить (и то сомнительно), если он за весь жизненный цикл приложения ни разу не поменяется
Добрый день, буду признателен, если ответите на вопрос не по теме: Объявление View объектов в Java: Нужно ли присваивать модификатор доступа private и/или ключевого слова final к примеру для объекта Button? Везде пишут по разному. Кто то декларирует как private, кто то только final, кто то private final. Ясно, что практической разницы от этого не много, но как принято писать в Android?
Интересный вопрос. Насчёт private я бы советовал его писать потому что видимость кнопки должна ограничиваться Активити тли фрагментом где вы его используете то есть не должно быть ((MyActivity) activity).btnTemp.performClick(). Насчёт final это просто экономия ресурсов можно писать по дефолту, но если вы будете переопределять ее то не надо.
@@MobileDeveloper Я примерно так и думал. Спасибо большое за ответ и за видео на канале в целом)
Класс Application это ведь Singleton?
Тут как сказать ) в системе Application стартует раньше всех Активити и прочего и насколько я помню это синглтон, но если вы хотите создать наследование то там надо будет создать свой инстанс
Пожно получить ошибку андроид по размеру памяти, если передавать много сериализуемых объектов через екстра.Как этого избежать?
Это ж сколько вы там передаёте?)) можно код глянуть?)
@@MobileDeveloper , сейчас не скажу точно, но класс небольшой.Там пять полей строковых и числовых.Дело в том, что когда это работало без БД приходилость тащить эту серилизацию через все активити.Т.е этот клас серилизовался и десерилизовался 6 раз в сумме.На 7 раз была ошибка.Поищу код и скину
Хм, без кода очень трудно понять в чем дело ))
@@MobileDeveloper ок,я выложу на гит и ссылку кину.
@@markkhakimulin592 Используйте для таких целей parcelable, он менее затратен по ресурсам и работает быстрее.