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

Комментарии • 36

  • @MobileDeveloper
    @MobileDeveloper  5 лет назад +8

    Если вам интересна тема паттернов проектирования - пишите в комментариях я все читаю и анализирую

  • @user-lb2ld2lq6t
    @user-lb2ld2lq6t 4 месяца назад

    Пасибо вам за ваши труды , очень интересно про паттерны проектирования

  • @FAIDER29
    @FAIDER29 5 лет назад +4

    Четко! Очень хорошо объясняете. Спасибо большое. Хотелось бы больше выпусков от Вас и особенно больше паттернов)

    • @MobileDeveloper
      @MobileDeveloper  5 лет назад +1

      Спасибо )) про паттерны как-то забросил, но надо вернуться к ним )

  • @KobaltMetal
    @KobaltMetal 5 лет назад +1

    интересно, особенно самые испльзуемые

  • @user-uy8dg8ln4k
    @user-uy8dg8ln4k 4 года назад +1

    отличный урок! спасибо!

  • @Anubis16661
    @Anubis16661 5 лет назад +3

    Очень приятный урок, всё понятно, приятная речь. Отдельный лайк за Ведьмака)

    • @MobileDeveloper
      @MobileDeveloper  5 лет назад +1

      Спасибо большое)) Ведьмака люблю с детства еще когда книги прочитал )

    • @illiamaksymenko804
      @illiamaksymenko804 4 года назад

      и за доту кст!))

    • @MobileDeveloper
      @MobileDeveloper  4 года назад

      Доту тоже люблю))

  • @KudashovDev
    @KudashovDev 3 года назад

    Очень интересно рассказываете) Поражаюсь, почему у вас так мало подписчиков, у вас лучший канал по мобильной разработке!
    Вопрос по паттерну
    Правильно ли будет его использовать для класса с настройками приложения и для класса с данными о юзере (ФИО, мб очки опыта, уровень и тд)?

    • @MobileDeveloper
      @MobileDeveloper  3 года назад +1

      Спасибо ) вы можете помочь каналу сделав везде репосты видео )
      Смотрите, главное чтоб синглтон не имел накалываемых состояний. То есть f(x) вначале приложения абсолютно равен f(x) через два часа/дня/недели работы приложения ) где f ваш синглтон а x приложение )

    • @KudashovDev
      @KudashovDev 3 года назад

      @@MobileDeveloper то есть в моем случае лучше не использовать? Потому что у меня у юзера будет меняться опыт и уровень и соответственно f(x) в один момент времени != f(x) в другой момент, плюс он в настройках может ФИО поменять. А как тогда лучше хранить эти данные?

    • @MobileDeveloper
      @MobileDeveloper  3 года назад +1

      Разные способы есть. Можно в sharedpreferences, можно в room ) можно на сервере. Все от задачи зависит

    • @KudashovDev
      @KudashovDev 3 года назад +1

      @@MobileDeveloper огромное спасибо! Помогли избежать ошибки) Чуть не начал делать через синглтон)

  • @Jocontacter
    @Jocontacter 5 лет назад

    Если используется ленивая инициализация, как в видео - то такая реализация не потокобезопасная.
    Лучше для новичков показать сразу примеры лучших практик, типа двойной проверки на null, типа:
    if(instance == null) { syncronize { if(instance == null) { instance = new Singleton() } } } return instance
    Иначе насоздаете экземпляров с разных потоков и будете работать с разными объектами а не с одним синглтоном. Либо, как уже было сказано - использовать Enum(в java). В остальном - как всегда лайк!

    • @MobileDeveloper
      @MobileDeveloper  5 лет назад

      Тут да вы абсолютно правы ) самая лучшая реализация это через enum ))

  • @kafychannel
    @kafychannel 3 года назад

    Отличное видео, давно вы его сняли, но думаю, что мой простой вопрос не заведёт вас в тупик, можно ли было не создавать новый объект Singletona (то есть не через new, а написать instance = this, то есть самому этому классу? Спасибо.

    • @MobileDeveloper
      @MobileDeveloper  3 года назад

      Там же статическая функция. Вам даже компилятор не даст так сделать

  • @CampOration
    @CampOration 5 месяцев назад

    В kotlin есть классы с глобальным доступом (object), что лучше использовать их или getInstance? В чём разница?

  • @chernobyl1999
    @chernobyl1999 5 лет назад +1

    Можно ли хранить список пользователей в синглтоне? К примеру List

    • @MobileDeveloper
      @MobileDeveloper  5 лет назад

      Смотря для чего вы хотите это сделать. Но вообще я бы не рекомендовал для большинства задач которые мне в голову приходят. Вам тяжело потом будет этот список хендлить. Его можно там хранить (и то сомнительно), если он за весь жизненный цикл приложения ни разу не поменяется

  • @user-ph2sk4sp7e
    @user-ph2sk4sp7e 5 лет назад

    Добрый день, буду признателен, если ответите на вопрос не по теме: Объявление View объектов в Java: Нужно ли присваивать модификатор доступа private и/или ключевого слова final к примеру для объекта Button? Везде пишут по разному. Кто то декларирует как private, кто то только final, кто то private final. Ясно, что практической разницы от этого не много, но как принято писать в Android?

    • @MobileDeveloper
      @MobileDeveloper  5 лет назад +1

      Интересный вопрос. Насчёт private я бы советовал его писать потому что видимость кнопки должна ограничиваться Активити тли фрагментом где вы его используете то есть не должно быть ((MyActivity) activity).btnTemp.performClick(). Насчёт final это просто экономия ресурсов можно писать по дефолту, но если вы будете переопределять ее то не надо.

    • @user-ph2sk4sp7e
      @user-ph2sk4sp7e 5 лет назад

      @@MobileDeveloper Я примерно так и думал. Спасибо большое за ответ и за видео на канале в целом)

  • @preenxus3425
    @preenxus3425 5 лет назад +1

    Класс 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 ок,я выложу на гит и ссылку кину.

    • @user-bx3xh6lw9z
      @user-bx3xh6lw9z 4 года назад

      ​@@markkhakimulin592​ Используйте для таких целей parcelable, он менее затратен по ресурсам и работает быстрее.