Шаблон делегирования - Delegation pattern
В программная инженерия, то схема делегирования является объектно-ориентированный шаблон дизайна это позволяет состав объекта добиться того же повторное использование кода в качестве наследование.
В составе делегации объект обрабатывает запрос, делегируя его второму объекту ( делегировать). Делегат вспомогательный объект, но с исходным контекстом. При поддержке делегирования на уровне языка это делается неявно, если себя
в делегате относятся к исходному (отправляющему) объекту, а не к делегату (принимающему объекту). В шаблоне делегата это вместо этого достигается путем явной передачи исходного объекта делегату в качестве аргумента метода.[1] Обратите внимание, что «делегирование» часто используется в широком смысле для обозначения отдельной концепции пересылка, где отправляющий объект просто использует соответствующий член на принимающем объекте, оцениваемый в контексте получение объект, а не исходный объект.
Обратите внимание, что в этой статье для двух объектов используется «отправляющий объект / получающий объект», а не «принимающий объект / делегат», подчеркивая, какие объекты отправляют и получают вызов делегирования, а не исходный вызов.
Определение
Во введении к Gamma et al. 1994 Грэди Буч определил делегацию как:
Делегация это способ сделать композицию такой же мощной для повторного использования, как и наследование [Lie86, JZ91]. В составе делегации два объекты участвуют в обработке запроса: объект-получатель делегирует операции своему делегировать. Это аналогично тому, как подклассы откладывают запросы к родительским классам. Но с наследованием унаследованная операция всегда может ссылаться на получающий объект через это переменная-член в C ++ и себя в Smalltalk. Чтобы добиться того же эффекта с делегированием, получатель передает себя делегату, чтобы делегированная операция ссылалась на получателя.[2]
Пример
В примере ниже (используя Котлин язык программирования), учебный класс Окно делегаты то площадь()
вызов его внутреннего объекта Rectangle (его делегата).
учебный класс Прямоугольник(вал ширина: Int, вал высота: Int) { весело площадь() = ширина * высота}учебный класс Окно(вал границы: Прямоугольник) { // Делегирование весело площадь() = границы.площадь()}
Языковая поддержка
Некоторые языки имеют встроенную поддержку делегирования.[3] Например, в Котлин язык программирования, мы могли бы написать:
интерфейс ClosedShape { весело площадь(): Int}учебный класс Прямоугольник(вал ширина: Int, вал высота: Int) : ClosedShape { отменять весело площадь() = ширина * высота}учебный класс Окно(частный вал границы: ClosedShape) : ClosedShape к границы
Смотрите также
- Делегирование (объектно-ориентированное программирование)
- Пересылка (объектно-ориентированное программирование)
- Аспектно-ориентированное программирование
- Делегирование (вычисление)
- Шаблон дизайна
- Образец фасада
- Шизофрения (объектно-ориентированное программирование)
Рекомендации
- ^ Gamma et al. 1994 г.
- ^ Гамма, Эрих; Хелм, Ричард; Джонсон, Ральф; Влиссидес, Джон (1995). Паттерны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования (14. печатн. Ред.). Ридинг, Массачусетс: Эддисон-Уэсли. п.20. ISBN 0-201-63361-2.
- ^ «Делегация - язык программирования Котлин». Котлин. Получено 2019-03-23.
внешняя ссылка
- Что такое делегирование, WikiWikiWeb
- Делегация на Код Розетты