No video

Одиночка. Singleton ► Шаблон проектирования ► Урок №9

  Рет қаралды 14,248

Dmitry Afanasyev

Dmitry Afanasyev

5 жыл бұрын

Порождающий паттерн (шаблон) проектирования - Одиночка (Singleton).
Рассмотрим три варианта реализации шаблона singleton.
.
Преимущества:
+ Гарантирует наличие единственного экземпляра класса.
+ Предоставляет к нему глобальную точку доступа.
+ Реализует отложенную инициализацию объекта-одиночки.
.
Недостатки:
- Нарушает принцип единственной ответственности класса (см SOLID).
- Проблемы мультипоточности.
- Требует создания Mock-объектов во время тестировании.
- Сложно отследить зависимости классов.
#шаблоны_проектирования #design_patterns #singleton
*
★ Автор: Дмитрий Афанасьев.
★ Телеграм с новостями: t.me/i640kb
★ Канал: clck.ru/JVYct
*
► Выразить благодарность, поддержать донатом развитие канала.
★ www.tinkoff.ru...
★ www.donational...
*
► Еще интересные курсы:
★ Видеокурс по Laravel: clck.ru/JVYa2
★ Видеокурс по Git: clck.ru/JVYYm
★ Объяснение SOLID: clck.ru/JVYXq
★ Шаблоны проектирования: clck.ru/JVYX7
★ Структурные шаблоны проектирования: clck.ru/TVB9Y
★★★ Все курсы → clck.ru/JVYVd
*
► Обязательно к изучению любому разработчику
★ www.ozon.ru/ca...
★ www.chitai-gor...

Пікірлер: 43
@DmitryAfanasyev
@DmitryAfanasyev 5 жыл бұрын
По заказу из донатов - следующий шаблон - Стратегия
@alex331911
@alex331911 5 жыл бұрын
Спасибо! Очень ждем!
@dmitryocheretko703
@dmitryocheretko703 4 жыл бұрын
А есть донаты с пожеланиями освещения unit тестов? Я бы внес свой вклад в донат для этой темы, если есть шанс что она войдет в курсе по ларе
@dmitryocheretko703
@dmitryocheretko703 4 жыл бұрын
Может пора реализовать донат-голосовалку полноценную?
@dmitryleiko2869
@dmitryleiko2869 5 жыл бұрын
Спасибо за труды)
@draackul
@draackul 3 жыл бұрын
Казалось бы, простой шаблон, но из видео узнал... увидел наглядный пример использования позднего статического связывания и оператор объединения с null. Даже не знал, что такой есть. И идея с трейтом интересная, можно просто копипастить из проекта в проект, не надо писать ручками. Хотя бы с такой точки зрения - полезная штука. А ларавел синглтон странный, если объект его класса можно и через new создать. Если синглтон может сохранять состояние, то это Реестр)
@codemaniacchannel6422
@codemaniacchannel6422 3 жыл бұрын
Спасибо. Было полезно
@hamidimomov232
@hamidimomov232 3 жыл бұрын
Супер
@alexanderk4481
@alexanderk4481 Жыл бұрын
Спасибо )
@user-sv7cf6ll2i
@user-sv7cf6ll2i Жыл бұрын
всё чётко, могёте 2:08
@user-gw2rx7sq7j
@user-gw2rx7sq7j Жыл бұрын
круть
@eaglesm1993
@eaglesm1993 5 жыл бұрын
Ух ты, добавлено 18 секунд назад) Да, синглтон знают все)
@user-vk4vr8iy7b
@user-vk4vr8iy7b 5 жыл бұрын
Продолжай!
@user-uh1rm8py7b
@user-uh1rm8py7b 5 жыл бұрын
Спасибо, было вкусно
@eaglesm1993
@eaglesm1993 5 жыл бұрын
О класс, я тоже когда начинал знакомиться с ларавелом, сделал трейт синглтона, не такой крутой конечно)
@eaglesm1993
@eaglesm1993 5 жыл бұрын
Смотри еще что заметил, можешь запутать новичков: 149 строка - запрашиваем создание объекта реализующего интерфейс AnotherConnetion 150 строка - используем метод которого нет в интерфейсе. Понятно что это пример ради примера, но я когда пытался въехать в такие вещи, - офигевал когда были какие то расхождения) Ну вот, видео досмотрел, я как то даже и не думал за магические методы, годное видео, спасибо за труд)
@DmitryAfanasyev
@DmitryAfanasyev 5 жыл бұрын
Я же сказал об этом - что для правильности метод надо объявить в интерфейсе...
@soversus5374
@soversus5374 2 ай бұрын
private в __wakeup больше не доступен.
@LSMacox
@LSMacox 4 жыл бұрын
1:03 😂😂 Да, я соглашусь.
@alex-and-er
@alex-and-er 2 ай бұрын
Забыл в SimpleSingleton классе закрыть конструктор!
@alexcc333
@alexcc333 4 жыл бұрын
Херак Херак и в продакшен))
@devvv747
@devvv747 5 жыл бұрын
Очень полезные видео, примеры! Хотелось бы почупать, попробовать, посмотреть более детальнее. Есть ли какой то репозиторий или ссылка откуда можно скачать?
@DmitryAfanasyev
@DmitryAfanasyev 5 жыл бұрын
На текущий момент времени только такой способ получить исходники - kzfaq.info/get/bejne/fuBniJiJzrbPm5s.html
@TimmertPlay
@TimmertPlay 3 жыл бұрын
Я немножко покопался в синглтоне, вроде бы всё очень банально, но всё равно остаётся дыра из-за которой можно создать новый объект. Можно создать объект используя статический метод класса. Даже если закрыт конструктор, хитрый новый разработчик может прийти, создать любой статический метод в классе и вернуть в нём "new self()". И вот ничего с этим не могу решить. Насколько я понимаю создание объекта внутри класса игнорирует приватность метода конструктора. В принципе это можно обойти, если вместо трейта сделать абстрактный класс и наследовать его, но тут мы должны быть уверены, что тогда класс, наследующий этот абстрактный класс синглтона не имеет публичного конструктора. Короче в php неоднозначно это всё и защиту от дураков не сделаешь или может я дурак и не нашёл, как это сделать. Может и не стоит зацикливаться на дураках, например классы синглтоны ларавелы тоже не защищены и в их случае экземпляр нужно получать только через DI или IoC контейнер, но ничего не мешает сделать new Illuminate\Http\Request А вообще спасибо вам за порождение интереса к паттернам проектирования
@draackul
@draackul 3 жыл бұрын
Приватный метод не доступен извне, но доступен самому классу. Так что игнорировать ничего не не надо. Если пугает то, что могут дописать новые методы, класс можно сделать final. А если редактировать сам класс, так можно просто убрать приватность с конструтора, зачем писать ещё новые методы.
@user-ni1tr8qg5m
@user-ni1tr8qg5m 3 жыл бұрын
Замечательные видео. Смотрю с удовольствием и черпаю знания. Небольшая неточность На 11:43 вы говорите "мы запрещаем клонирование". Но это не так. Метод __clone() дополняет обычное клонирование объекта, а не переписывает его. Тут маленький тест чтобы проверить prnt.sc/zgcyrc
@user-sb5lb3ql5f
@user-sb5lb3ql5f 5 жыл бұрын
Дмитрий давно хотел у вас спросить а как вы располагаете открытые вкладки в Шторме справа в столбик? Искал как сделать не нашел))) Может конечно я плохо искал)))) Но все же хотел бы у Вас узнать)))
@noname-nonaymich
@noname-nonaymich 4 жыл бұрын
А свойство $singletons, созданное в AppProvider - это какое-то предопределенное название? Сначала просто назвал $singleton и долго не мог понять почему мне Ларавел ошибку выкидывает: Illuminate\Contracts\Container\BindingResolutionException thrown with message "Target [App\DesignPatterns\Creational\Singleton\Interfaces\AnotherConnection] is not instantiable." Спасибо за видео!
@mugen31337
@mugen31337 4 жыл бұрын
да. и об этом говорится в видео
@lilwayne5504
@lilwayne5504 5 жыл бұрын
Дмитрий, здравствуйте, смотрю ваш канал уже полгода :) Можете сделать урок о том, как сделать на своем сайта на laravel внутреннюю валютную систему? Если кратко - пользователи могут покупать условные монетки на сайте, с помощью которых они могут играть друг с другом в шахматы. Эти монетки можно выводить на webmoney, банковскую карту. Нет ни одного урока в интернете как реализовать такую систему безопасно и надежно. Раскроете тему? :)
@DmitryAfanasyev
@DmitryAfanasyev 5 жыл бұрын
Это тянет на хороший курс )))))
@DmitryAfanasyev
@DmitryAfanasyev 5 жыл бұрын
Хороший - всмысле - не маленький.
@lilwayne5504
@lilwayne5504 5 жыл бұрын
@@DmitryAfanasyev , буду рад, если выпустите такой курс :) приобрету самый первый! :)
@dimanstyle
@dimanstyle 5 жыл бұрын
@@lilwayne5504 в принципе если с логикой у вас все хорошо, то вам потребуется всего 2 пакета. 1 - биллинг любой удобный вам (стоковый для Лары есть в документации или же Omnipay или Payum) сравнение последних можно найти на тостере. 2 - пакет для работы с внутренней валютой (таблица с id пользователя и кол-вом монет)(минимальный набор) так же (таблица транзакций)(но тут надо тестить нужна ли она) и сам класс реализующий механику работы (передачу монет между пользователями и защиту от передачи большего значения суммы монет чем есть. Так же гетер чтобы получить текущий баланс и думаю все) для вывода средств с сайта придется что-то колхозить, а так в общем то что вы хотите реализовать я вижу как-то так. Может быть Дмитрий как белое опытный программист увидит в этом описании то что я не продумл. Но думаю общая концепция должна выглядеть как-то так
@draackul
@draackul 3 жыл бұрын
Есть во вконтакте такие шахматы. Не знаю кто в это вообще играет, когда есть бесплатные аналоги) Я бы сказал, что это изначально мёртвая идея, но видимо этим кто-то пользуется.
@EdwardNorthwind
@EdwardNorthwind 5 жыл бұрын
Честно говоря в реалиях РНР даже не знаю, где этот шаблон пригодится. Это же не локальное ПО, где классы существуют пока работает ПО. Хотя если писать что-то прям совсем тяжелое, где перегружаться вся страница не будет, то да, но я до такого уровня еще не дорос.
@medvedvshapke
@medvedvshapke 5 жыл бұрын
В смысле не знаешь где пригодится? Используется и очень часто.
@DmitryAfanasyev
@DmitryAfanasyev 5 жыл бұрын
Будь он не востребован - в ларавел бы точно не включили возможность порождать их на автопилоте.
@user-cb2df9zy6d
@user-cb2df9zy6d 4 жыл бұрын
Я правильно понимаю, что объект уникален только в цикле работы приложения для одного конкретного пользователя? То есть сколько пользователей, столько и объектов таких?
@vitall789
@vitall789 4 жыл бұрын
@@user-cb2df9zy6d Объект один, сссылок на него много только может быть, так как переменная в ПХП ссылки на объекты копирует.
@TimmertPlay
@TimmertPlay 3 жыл бұрын
@@user-cb2df9zy6d что вы подразумеваете под пользователем? Объект уникален во время выполнения php скрипта. В те секунды или милисекунды, что сервер возвращает ответ клиенту ( чаще всего браузеру ).
@modestusmunh93
@modestusmunh93 Жыл бұрын
По поводу сохранения состояния: В классе работы с БД мы ведь вынуждены хранить «подклбчение» к БД, верно? А методы того же Логгера сделать статическими и забыть о создании синглтона. Что я не понял правильно?
@eaglesm1993
@eaglesm1993 5 жыл бұрын
Ух ты, добавлено 18 секунд назад) Да, синглтон знают все)
A little girl was shy at her first ballet lesson #shorts
00:35
Fabiosa Animated
Рет қаралды 21 МЛН
A teacher captured the cutest moment at the nursery #shorts
00:33
Fabiosa Stories
Рет қаралды 61 МЛН
Little brothers couldn't stay calm when they noticed a bin lorry #shorts
00:32
Fabiosa Best Lifehacks
Рет қаралды 17 МЛН
Шаблоны Java. Одиночка (Singleton)
31:02
Vladimir Vysokomornyi
Рет қаралды 18 М.
Singleton - избегайте его
17:35
Volodya Mozhenkov
Рет қаралды 26 М.
Паттерн Singleton (Одиночка) в Python
36:55
Python Russian
Рет қаралды 11 М.
Singleton Design Pattern in C# - Do it THAT way
13:15
tutorialsEU - C#
Рет қаралды 25 М.
Паттерны проектирования на Python: Паттерн Прототип
9:01
EngineerSpock - IT & программирование
Рет қаралды 11 М.
A little girl was shy at her first ballet lesson #shorts
00:35
Fabiosa Animated
Рет қаралды 21 МЛН