Подтвердить что ты не робот

Обычные обычаи для цепочки ответственности?

Я видел учебное видео, объясняющее структуру шаблона ответственности, и я думаю, что понимаю, как это работает, но я не уверен, когда я действительно его использую. Каковы общие привычки в цепочке ответственности?

4b9b3361

Ответ 1

Из GoF:

Известное использование

В нескольких библиотеках классов используется цепочка ответственности шаблон для обработки пользовательских событий. Они используют разные имена для Класс обработчика, но идея такая же: когда пользователь нажимает мыши или нажатие клавиши, событие генерируется и передается вдоль цепь. MacApp [App89] и ET ++ [WGM88] называют это "EventHandler", Библиотека Symantec TCL [Sym93b] называет ее "Бюрократ" и NeXT В AppKit [Add94] используется имя "Ответчик".

Рамка Unidraw для графических редакторов определяет объекты Command которые инкапсулируют запросы к объектам Component и ComponentView [VL90]. Команды - это запросы в том смысле, что компонент или компонентный вид может интерпретировать команду для выполнения операции. Эта соответствует подходу "запросы как объекты", описанному в Реализация. Компоненты и представления компонентов могут быть структурированы иерархически. Компонент или вид компонента могут перенаправлять команду интерпретация его родителям, что в свою очередь может родителя и т.д., тем самым формируя цепочку ответственности.

ET ++ использует Chain of Responsibility для обработки графического обновления. графический объект вызывает операцию InvalidateRect всякий раз, когда она должна обновить часть своего внешнего вида. Графический объект не может обрабатывать InvalidateRect сам по себе, потому что он недостаточно знает о своих контекст. Например, графический объект может быть заключен в объекты например Scrollers или Zoomers, которые преобразуют свою систему координат. Что означает, что объект может прокручиваться или масштабироваться так, чтобы он частично вне поля зрения. Поэтому реализация InvalidateRect по умолчанию пересылает запрос на контейнерный объект. Последний объект в цепочке пересылки является экземпляром окна. Тем временем Окно получает запрос, гарантируется прямоугольник аннулирования для правильного преобразования. Окно обрабатывает InvalidateRect уведомляя интерфейс оконной системы и запрашивая обновление.