Szoftverfejlesztésben a delegációminta az objektumorientált programtervezési mintákhoz tartozik. Lehetővé teszi egy objektum-összetétel számára, hogy ugyanolyan jellegű kód-újrafelhasználást érjen el, mint például az öröklődés.
Delegálás során egy kérés úgy kezelődik, hogy egy objektum ezt a kérést egy második objektumra (a meghatalmazottra) átruházza. A meghatalmazott az csak egy segédobjektum az eredetinek a környezetével. A delegálás nyelvi szintű támogatásával ezt úgy hajtják végre implicit módon, hogy a "self" kulcsszó segítségével az eredeti (küldő) objektumra utalnak, és nem a megbízottra (a fogadó objektumra). A delegációmintában ezt inkább úgy érik el, hogy az eredeti objektumot közvetlenül a meghatalmazottnak adjuk át, például egy metódus változójaként.Gamma et al. 1994 Vegyük figyelembe, hogy a "delegálást" gyakran helytelenül használják a továbbítás pontos fogalmaként, amikor a küldő objektum egyszerűen a fogadó objektum megfelelő tagját használja.
Vegyük figyelembe, hogy ez a cikk inkább a "kérések küldését/fogadását" mutatja be két objektum között, és nem az "objektum/meghatalmazott fogadását". Kihangsúlyozza, hogy mely objektumok küldik és fogadják a delegálási hívást, és nem pedig az eredeti hívást.
Definíció 1994-ben Grady Booch a következő definícióját határozta meg a delegációnak:
Példa Az alábbi példában (a Kotlin programozási nyelv használatával) a Window osztály delegálja az area() metódus hívását a belső Rectangle objektumának (a megbízottjának).
class Rectangle(val width: Int, val height: Int) { fun area() = width * height }
class Window(val bounds: Rectangle) { // Delegation fun area() = bounds.area() }
Nyelvi támogatottság Egyes nyelvek külön támogatják a beépített delegációt. Például ha a Kotlin programozási nyelven írnánk a példát:
interface ClosedShape { fun area(): Int }
class Rectangle(val width: Int, val height: Int) : ClosedShape { override fun area() = width * height }
class Window(private val bounds: ClosedShape) : ClosedShape by bounds
Források
Fordítás
További információk What Is Delegation, WikiWikiWeb
Kategória:Programtervezési minták