Vzor delegování - Delegation pattern
v softwarové inženýrství, vzor delegování je objektově orientovaný návrhový vzor to umožňuje složení objektu dosáhnout stejného opětovné použití kódu tak jako dědictví.
V delegaci, an objekt zpracovává požadavek delegováním na druhý objekt ( delegát). Delegát je a pomocný objekt, ale s původním kontextem. S podporou delegace na jazykové úrovni se to provádí implicitně tím, že já
v delegátu odkazují na původní (odesílající) objekt, ne na delegáta (přijímající objekt). Ve vzoru delegáta se to místo toho provádí explicitním předáním původního objektu delegátovi jako argumentu metody.[1] Všimněte si, že „delegování“ se často používá volně k označení odlišného pojmu spedice, kde odesílající objekt jednoduše používá odpovídající člen na přijímajícím objektu, vyhodnocen v kontextu příjem objekt, ne původní objekt.
Upozorňujeme, že tento článek používá pro oba objekty „odesílání objektu / příjem objektu“, nikoli „příjem objektu / delegáta“, přičemž zdůrazňuje, které objekty odesílají a přijímají volání delegace, nikoli původní volání.
Definice
V úvodu do Gamma et al. 1994, Grady Booch definoval delegaci jako:
Delegace je způsob, jak učinit kompozici stejně silnou pro opětovné použití jako dědictví [Lie86, JZ91]. V delegaci, dva objekty jsou zapojeny do zpracování požadavku: přijímající objekt deleguje operace na svůj delegát. To je analogické s podtřídami odkládajícími požadavky na nadřazené třídy. Ale s dědičností může zděděná operace vždy odkazovat na přijímající objekt prostřednictvím tento členské proměnné v C ++ a já v Smalltalk. Aby se dosáhlo stejného efektu při delegování, příjemce se předá delegátovi, aby delegovaná operace odkazovala na příjemce.[2]
Příklad
V níže uvedeném příkladu (pomocí Kotlin programovací jazyk), třída Okno delegáti the plocha()
volání na jeho interní objekt Obdélník (jeho delegát).
třída Obdélník(val šířka: Int, val výška: Int) { zábava plocha() = šířka * výška}třída Okno(val meze: Obdélník) { // Delegování zábava plocha() = meze.plocha()}
Jazyková podpora
Některé jazyky mají zabudovanou speciální podporu pro delegování.[3] Například v Kotlin programovací jazyk, můžeme napsat:
rozhraní Uzavřený tvar { zábava plocha(): Int}třída Obdélník(val šířka: Int, val výška: Int) : Uzavřený tvar { přepsat zábava plocha() = šířka * výška}třída Okno(soukromé val meze: Uzavřený tvar) : Uzavřený tvar podle meze
Viz také
- Delegování (objektově orientované programování)
- Přeposílání (objektově orientované programování)
- Aspektově orientované programování
- Delegování (výpočet)
- Návrhový vzor
- Fasádní vzor
- Schizofrenie (objektově orientované programování)
Reference
- ^ Gamma a kol. 1994
- ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Návrhové vzory: prvky opakovaně použitelného objektově orientovaného softwaru (14. tisk. Vyd.). Reading, Mass .: Addison-Wesley. str.20. ISBN 0-201-63361-2.
- ^ „Delegace - programovací jazyk Kotlin“. Kotlin. Citováno 2019-03-23.
externí odkazy
- Co je to delegace, WikiWikiWeb
- Delegace na Rosettský kód