Делегация үлгісі - Delegation pattern

Жылы бағдарламалық жасақтама, делегация үлгісі болып табылады объектіге бағытталған дизайн үлгісі бұл мүмкіндік береді объектінің құрамы сол жетістікке жету кодты қайта пайдалану сияқты мұрагерлік.

Делегация құрамында объект сұранысты екінші объектіге беру арқылы өңдейді ( делегат). Делегат - а көмекші объект, бірақ бастапқы контекстпен. Делегацияға тілдік қолдау көрсете отырып, бұл жанама түрде жасалады өзіндік делегатта делегат (қабылдау объектісі) емес, түпнұсқа (жіберуші) объектіге сілтеме жасалады. Делегат үлгісінде бұл әдіске дәлел ретінде түпнұсқа нысанды делегатқа нақты беру арқылы жүзеге асырылады.[1] «Делегация» -ның нақты тұжырымдамасына сілтеме жасау үшін жиі еркін пайдаланылатынына назар аударыңыз бағыттау, мұнда жөнелтуші объект қабылдаушы объектіде контекст бойынша бағаланатын тиісті мүшені қолданады қабылдау объект, бастапқы объект емес.

Бұл мақалада екі объект үшін «қабылдау объектісі / делегат» емес, «жіберуші объект / қабылдау объектісі» қолданылатынын ескеріңіз, қай объектілер бастапқы қоңырау емес, делегациялық шақыруды жіберетінін және алатындығын атап көрсетеді.

Анықтама

Гаммаға кіріспесінде және т.б. 1994 ж., Греди Буч делегацияны келесідей анықтады:

Делегация композицияны мұра сияқты қайта пайдалану үшін қуатты ету тәсілі [Lie86, JZ91]. Делегация құрамында, екі нысандар сұранысты өңдеуге қатысады: алушы объект операцияларды оған береді делегат. Бұл ата-аналық сыныптарға сұраныстарды кейінге қалдыратын ішкі сыныптарға ұқсас. Бірақ мұрагерлікпен мұрагерлік операция әрқашан арқылы қабылдайтын объектіге сілтеме жасай алады бұл мүше айнымалысы C ++ және өзіндік Smalltalk. Дәл осындай нәтижеге қол жеткізу үшін қабылдағыш делегатқа беріледі, бұл өкілетті операцияны ресиверге сілтеме жасау үшін.[2]

Мысал

Төмендегі мысалда ( Котлин бағдарламалау тілі), сынып Терезе делегаттар The аудан () оның ішкі Тіктөртбұрыш нысанын шақыру (оның делегаты).

сынып Тік төртбұрыш(вал ені: Int, вал биіктігі: Int) {    көңілді аудан() = ені * биіктігі}сынып Терезе(вал шекаралар: Тік төртбұрыш) {    // Делегация    көңілді аудан() = шекаралар.аудан()}

Тілдерді қолдау

Кейбір тілдер кірген делегацияны арнайы қолдайды.[3] Мысалы, Котлин бағдарламалау тілі, біз мынаны жаза алдық:

интерфейс Жабық пішін {    көңілді аудан(): Int}сынып Тік төртбұрыш(вал ені: Int, вал биіктігі: Int) : Жабық пішін {    жоққа шығару көңілді аудан() = ені * биіктігі}сынып Терезе(жеке вал шекаралар: Жабық пішін) : Жабық пішін арқылы шекаралар

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Гамма және басқалар. 1994 ж
  2. ^ Гамма, Эрих; Хельм, Ричард; Джонсон, Ральф; Влиссид, Джон (1995). Дизайн үлгілері: объектіге бағдарланған қайта қолдануға болатын бағдарламалық жасақтама элементтері (14. баспа ред.). Рединг, Массачусетс: Аддисон-Уэсли. б.20. ISBN  0-201-63361-2.
  3. ^ «Делегация - бағдарламалау тілі Котлин». Котлин. Алынған 2019-03-23.

Сыртқы сілтемелер