Singleton - антипаттерн? Паттерны проектирования [RU, Android] / Мобильный разработчик

  Рет қаралды 7,666

Mobile Developer

Mobile Developer

Күн бұрын

Всем привет. Продолжаем разбирать шаблоны проектирования. И поговорим о самом популярном шаблоне (или антишаблоне?) проектирования - Singleton (Одиночка). Посмотрим, где применяется, как создается, плюсы и минусы
Мобильный разработчик в других соц. сетях
=======================
Вконтакте - mdeveloper
Instagram - / nplau
=======================
Наши друзья и информационные партнеры:
t.me/androidev - Телеграмм канал, посвященный разработке для Андроид!
Поддержать канал рублем:
PayPal - alexgladkov@icloud.com
Mastercard - 5536 9137 9985 0652
Статья на хабрхабр о создании Singleton - habr.com/post/...
Ставь лайк, подписывайся и пиши, чтобы ты хотел увидеть в следующих видео.
Поддержать канал рублем:
PayPal - alexgladkov@icloud.com
Mastercard - 5486 7320 6639 0634

Пікірлер: 36
@MobileDeveloper
@MobileDeveloper 6 жыл бұрын
Если вам интересна тема паттернов проектирования - пишите в комментариях я все читаю и анализирую
@НиколайБыков-л3ю
@НиколайБыков-л3ю 6 жыл бұрын
Да, это интересно!
@MobileDeveloper
@MobileDeveloper 6 жыл бұрын
Спасибо ))
@FAIDER29
@FAIDER29 5 жыл бұрын
Четко! Очень хорошо объясняете. Спасибо большое. Хотелось бы больше выпусков от Вас и особенно больше паттернов)
@MobileDeveloper
@MobileDeveloper 5 жыл бұрын
Спасибо )) про паттерны как-то забросил, но надо вернуться к ним )
@ДжошКембл
@ДжошКембл 10 ай бұрын
Пасибо вам за ваши труды , очень интересно про паттерны проектирования
@Anubis16661
@Anubis16661 6 жыл бұрын
Очень приятный урок, всё понятно, приятная речь. Отдельный лайк за Ведьмака)
@MobileDeveloper
@MobileDeveloper 6 жыл бұрын
Спасибо большое)) Ведьмака люблю с детства еще когда книги прочитал )
@illiamaksymenko804
@illiamaksymenko804 5 жыл бұрын
и за доту кст!))
@MobileDeveloper
@MobileDeveloper 5 жыл бұрын
Доту тоже люблю))
@KobaltMetal
@KobaltMetal 6 жыл бұрын
интересно, особенно самые испльзуемые
@РоманТетерин-в3х
@РоманТетерин-в3х 5 жыл бұрын
отличный урок! спасибо!
@MobileDeveloper
@MobileDeveloper 5 жыл бұрын
Пожалуйста )
@CampOration
@CampOration 11 ай бұрын
В kotlin есть классы с глобальным доступом (object), что лучше использовать их или getInstance? В чём разница?
@Jocontacter
@Jocontacter 5 жыл бұрын
Если используется ленивая инициализация, как в видео - то такая реализация не потокобезопасная. Лучше для новичков показать сразу примеры лучших практик, типа двойной проверки на null, типа: if(instance == null) { syncronize { if(instance == null) { instance = new Singleton() } } } return instance Иначе насоздаете экземпляров с разных потоков и будете работать с разными объектами а не с одним синглтоном. Либо, как уже было сказано - использовать Enum(в java). В остальном - как всегда лайк!
@MobileDeveloper
@MobileDeveloper 5 жыл бұрын
Тут да вы абсолютно правы ) самая лучшая реализация это через enum ))
@KudashovDev
@KudashovDev 3 жыл бұрын
Очень интересно рассказываете) Поражаюсь, почему у вас так мало подписчиков, у вас лучший канал по мобильной разработке! Вопрос по паттерну Правильно ли будет его использовать для класса с настройками приложения и для класса с данными о юзере (ФИО, мб очки опыта, уровень и тд)?
@MobileDeveloper
@MobileDeveloper 3 жыл бұрын
Спасибо ) вы можете помочь каналу сделав везде репосты видео ) Смотрите, главное чтоб синглтон не имел накалываемых состояний. То есть f(x) вначале приложения абсолютно равен f(x) через два часа/дня/недели работы приложения ) где f ваш синглтон а x приложение )
@KudashovDev
@KudashovDev 3 жыл бұрын
@@MobileDeveloper то есть в моем случае лучше не использовать? Потому что у меня у юзера будет меняться опыт и уровень и соответственно f(x) в один момент времени != f(x) в другой момент, плюс он в настройках может ФИО поменять. А как тогда лучше хранить эти данные?
@MobileDeveloper
@MobileDeveloper 3 жыл бұрын
Разные способы есть. Можно в sharedpreferences, можно в room ) можно на сервере. Все от задачи зависит
@KudashovDev
@KudashovDev 3 жыл бұрын
@@MobileDeveloper огромное спасибо! Помогли избежать ошибки) Чуть не начал делать через синглтон)
@chernobyl1999
@chernobyl1999 5 жыл бұрын
Можно ли хранить список пользователей в синглтоне? К примеру List
@MobileDeveloper
@MobileDeveloper 5 жыл бұрын
Смотря для чего вы хотите это сделать. Но вообще я бы не рекомендовал для большинства задач которые мне в голову приходят. Вам тяжело потом будет этот список хендлить. Его можно там хранить (и то сомнительно), если он за весь жизненный цикл приложения ни разу не поменяется
@kafychannel
@kafychannel 4 жыл бұрын
Отличное видео, давно вы его сняли, но думаю, что мой простой вопрос не заведёт вас в тупик, можно ли было не создавать новый объект Singletona (то есть не через new, а написать instance = this, то есть самому этому классу? Спасибо.
@MobileDeveloper
@MobileDeveloper 4 жыл бұрын
Там же статическая функция. Вам даже компилятор не даст так сделать
@ИльяИванов-л1ъ6н
@ИльяИванов-л1ъ6н 5 жыл бұрын
Добрый день, буду признателен, если ответите на вопрос не по теме: Объявление View объектов в Java: Нужно ли присваивать модификатор доступа private и/или ключевого слова final к примеру для объекта Button? Везде пишут по разному. Кто то декларирует как private, кто то только final, кто то private final. Ясно, что практической разницы от этого не много, но как принято писать в Android?
@MobileDeveloper
@MobileDeveloper 5 жыл бұрын
Интересный вопрос. Насчёт private я бы советовал его писать потому что видимость кнопки должна ограничиваться Активити тли фрагментом где вы его используете то есть не должно быть ((MyActivity) activity).btnTemp.performClick(). Насчёт final это просто экономия ресурсов можно писать по дефолту, но если вы будете переопределять ее то не надо.
@ИльяИванов-л1ъ6н
@ИльяИванов-л1ъ6н 5 жыл бұрын
@@MobileDeveloper Я примерно так и думал. Спасибо большое за ответ и за видео на канале в целом)
@preenxus3425
@preenxus3425 5 жыл бұрын
Класс Application это ведь Singleton?
@MobileDeveloper
@MobileDeveloper 5 жыл бұрын
Тут как сказать ) в системе Application стартует раньше всех Активити и прочего и насколько я помню это синглтон, но если вы хотите создать наследование то там надо будет создать свой инстанс
@markkhakimulin592
@markkhakimulin592 5 жыл бұрын
Пожно получить ошибку андроид по размеру памяти, если передавать много сериализуемых объектов через екстра.Как этого избежать?
@MobileDeveloper
@MobileDeveloper 5 жыл бұрын
Это ж сколько вы там передаёте?)) можно код глянуть?)
@markkhakimulin592
@markkhakimulin592 5 жыл бұрын
@@MobileDeveloper , сейчас не скажу точно, но класс небольшой.Там пять полей строковых и числовых.Дело в том, что когда это работало без БД приходилость тащить эту серилизацию через все активити.Т.е этот клас серилизовался и десерилизовался 6 раз в сумме.На 7 раз была ошибка.Поищу код и скину
@MobileDeveloper
@MobileDeveloper 5 жыл бұрын
Хм, без кода очень трудно понять в чем дело ))
@markkhakimulin592
@markkhakimulin592 5 жыл бұрын
@@MobileDeveloper ок,я выложу на гит и ссылку кину.
@ДмитрийГригорьев-о9ю
@ДмитрийГригорьев-о9ю 5 жыл бұрын
​@@markkhakimulin592​ Используйте для таких целей parcelable, он менее затратен по ресурсам и работает быстрее.
Евгений Борисов - Spring Patterns
56:38
TechTrain
Рет қаралды 139 М.
ВЛОГ ДИАНА В ТУРЦИИ
1:31:22
Lady Diana VLOG
Рет қаралды 1,2 МЛН
УНО Реверс в Амонг Ас : игра на выбывание
0:19
Фани Хани
Рет қаралды 1,3 МЛН
Маусымашар-2023 / Гала-концерт / АТУ қоштасу
1:27:35
Jaidarman OFFICIAL / JCI
Рет қаралды 390 М.
ВЛОГ ДИАНА В ТУРЦИИ
1:31:22
Lady Diana VLOG
Рет қаралды 1,2 МЛН