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