Спасибо за видео, но у меня вопрос - а есть ли готовые решения из коробки для реализации событий и подписки не них? У меня в проекте в одном объекте множество событий которые должны отслеживать множество других объектов - и писать обёртку под каждый тип события как-то затратно чтоли. Или я что-то не до конца понял? Хочется какую то простую структуру - объявил ивент, подписал на него кого надо, и вызываю его когда надо. :)
в методе main в первых двух случаях, когда мы добавляем вакансии (addVacancy) метод notifyObservers не реализуется, потому что ни одного observer еще не существует в списке. Я правильно понимаю, что здесь мы должны обрабатывать ошибку nullPointerException??
Нет, Nullpointer мог выскочить, если бы мы сделали так List observers; Не проиниуиализировав наш список, а проверку на пустоту подписчиков ты можешь проверять через метод size, к примеру, notifyObservers(List) { if(observerd.size == 0) { println("Подписчиков нету, некого уведомлять о новых вакансиях " ) } else ( Проходимся через цикл for each, как в видео и у каждого обсервера вызываем onHandleEvent(vacancies) ) }
@@EugeneSuleimanov я думал может это так принято делать, чтобы акцентировать внимание на этом. Но походу в реальных проектах никто лишнее this не будет писать.
Чем данная реализация лучше от элементарного расширение интерфейсом Observer docs.oracle.com/javase/7/docs/api/java/util/Observer.html и переопределении метода update?
моя ошибка) Не корректно поставил вопрос. Чем может быть лучше в плане поддержки и расширении кода? У меня задача "наблюдать" за несколькими полями объекта, которые изменяются не всегда все сразу, а в зависимости от бизнес логики. В дальнейшем необходимо вести обновление записи в локальной БД с учетом измененного состояния поля
Коммент больше не к автору комментария, а больше для тех, кто смотрит в 2019 году и позже. Обратите внимание, что интерфейс Observer и класс Observable являются deprecated, начиная с Java9. Они рекомендуют (это прямо написано в комментарии в коде JDK), что стоит использовать, например, очереди из пакета java.util.concurrent. docs.oracle.com/javase/9/docs/api/java/util/Observable.html Хорошие и при этом простые, на мой взгляд, примеры, как использовать очереди в паттерне Издатель-Подписчик (он же Наблюдатель) в многопоточных приложениях есть, например, вот тут www.mkyong.com/java/java-blockingqueue-examples/
@@qwerty-hc7od Привет из 2020 :-) даже в этом году, может потребоваться этот шаблон :-) Для того, что бы знать, что он есть... Или если ты до сих пор на Java8 в продакшене :-)
Всё по существу, поставленная речь. приятно и смотреть и слушать. Спасибо большое!
Спасибо за отзыв!
Объясняете невероятно хорошо, смотрю 4 ваше видео про паттерны. Большое Вам спасибо!
Super kanal! Mnogo interesnoi informacii!
Spasibo Eugene!
Пожалуйста )
Спасибо за отзыв.
Спасибо за видео.! То что нужно!
Пожалуйста, Алексей.
Отличный урок. Рекомендую его всем
Желаю автору канала не забрасывать его.
Спасибо за видео, но у меня вопрос - а есть ли готовые решения из коробки для реализации событий и подписки не них? У меня в проекте в одном объекте множество событий которые должны отслеживать множество других объектов - и писать обёртку под каждый тип события как-то затратно чтоли. Или я что-то не до конца понял? Хочется какую то простую структуру - объявил ивент, подписал на него кого надо, и вызываю его когда надо. :)
Отличный урок! Спасибо)
Всё четко!
Спасибо :)
@@Revolted14 спасибо за отзыв!
+вайб, респект
Спасибо за поддержку!
Большое спасибо
в методе main в первых двух случаях, когда мы добавляем вакансии (addVacancy) метод notifyObservers не реализуется, потому что ни одного observer еще не существует в списке. Я правильно понимаю, что здесь мы должны обрабатывать ошибку nullPointerException??
Нет, Nullpointer мог выскочить, если бы мы сделали так List observers;
Не проиниуиализировав наш список, а проверку на пустоту подписчиков ты можешь проверять через метод size, к примеру,
notifyObservers(List) {
if(observerd.size == 0) {
println("Подписчиков нету, некого уведомлять о новых вакансиях " )
} else (
Проходимся через цикл for each, как в видео и у каждого обсервера вызываем onHandleEvent(vacancies)
)
}
Подскажите пожалуйста название вашего плагина для отображения UML-диаграмм.
Это стандартный плагин, который входит в ultimate версию intellij idea. В community, насколько я знаю, его нет.
@@EugeneSuleimanov А не подскажете где его искать... Может конечно его попросту нет в Ultimate Beta, но, что-то не нахожу...
Очень хорошее видео. А мог бы автор ещё отснять ролик по шаблону проектированию делегат? Очень надо.
А если у меня всё-таки один-ко-многим связь, мне в классах наблюдателях нужно везде создавать новый объект класса наблюдаемого?
Классы, на которые подписываются, называются субъектами (Subject), а не наблюдаемыми.
Подробнее здесь: на pcask.ru/programmirovanie/pattern-observer/
у этого паттерна корреляция с Медиатором есть. Чем-то схожи в функциональности.
чел хорош
Как срабатывает notifyObservers?)))
когда добавляется или удаляется вакансия, происходит вызов notifyObservers(). Этот метод вызывает у всех наблюдателей метод handleEvent().
Очень похож на медиатор
зачем в методах постоянно указывать this?
Своего рода - игра в капитана очевидность ) А на самом деле - и без этого будет работать - вы правы
@@EugeneSuleimanov я думал может это так принято делать, чтобы акцентировать внимание на этом. Но походу в реальных проектах никто лишнее this не будет писать.
@@EugeneSuleimanov thanks
@@ДенисЩурин-щ1к не будет тк путает
+
Хороший ролик. Только по клаве бьешь аж уши режет)
не стучи так по клаве кнопки сломаешь
Постараюсь )
Громче! Надо еще громче стучать по этим долбаным клавишам, потому что еще есть куда сильнее бесить.
Чем данная реализация лучше от элементарного расширение интерфейсом Observer docs.oracle.com/javase/7/docs/api/java/util/Observer.html и переопределении метода update?
Василий Решетняк Данная реализация не должна быть лучше какой-либо. Ее цель - показать основные аспекты шаблона проектирования "Наблюдатель".
моя ошибка) Не корректно поставил вопрос. Чем может быть лучше в плане поддержки и расширении кода? У меня задача "наблюдать" за несколькими полями объекта, которые изменяются не всегда все сразу, а в зависимости от бизнес логики. В дальнейшем необходимо вести обновление записи в локальной БД с учетом измененного состояния поля
В данном случае, конечно же, лучше использовать уже готовые реализации.
Коммент больше не к автору комментария, а больше для тех, кто смотрит в 2019 году и позже.
Обратите внимание, что интерфейс Observer и класс Observable являются deprecated, начиная с Java9. Они рекомендуют (это прямо написано в комментарии в коде JDK), что стоит использовать, например, очереди из пакета java.util.concurrent. docs.oracle.com/javase/9/docs/api/java/util/Observable.html
Хорошие и при этом простые, на мой взгляд, примеры, как использовать очереди в паттерне Издатель-Подписчик (он же Наблюдатель) в многопоточных приложениях есть, например, вот тут www.mkyong.com/java/java-blockingqueue-examples/
@@qwerty-hc7od Привет из 2020 :-) даже в этом году, может потребоваться этот шаблон :-)
Для того, что бы знать, что он есть...
Или если ты до сих пор на Java8 в продакшене :-)