Létrehozási minta

A Wikipédiából, a szabad enciklopédiából

Az informatikában a „létrehozási minták (angolul Creational Patterns) a példányosítási folyamat elvont ábrázolásai.”[1]

Ezek a minták objektumok létrehozására valók. Bizonyos helyzetekben az objektumok közvetlen létrehozása elbonyolíthatja a terveket vagy a kódot. A létrehozási minták ezt egyszerűsítik, és a létrehozás felelősségét a tervmintában szereplő objektumokra ruházza át. Ezek magukba zárják a folyamatot, így azzal a kliensnek nem kell foglalkoznia. A másik alapelv szerint elrejtik a termék konkrét típusát, a létrehozás folyamatát, és azt, miképp kombinálódnak.[2]

A létrehozási minták tovább osztályozhatók, mint objektumlétrehozási és osztálylétrehozási minták. Az objektumlétrehozási minták objektum létrehozásával, az osztálylétrehozási minták osztálypéldányosítással foglalkoznak. Máshogy fogalmazva: az objektumlétrehozási minták az objektumlétrehozást egy másik objektumra hagyják, az osztálylétrehozásiak az alosztályokra.[3]

Definíció[szerkesztés]

A létrehozási minta egy rendszerben segíti elkülöníteni, hogy az objektumait hogyan hozzák létre, inicializálják és állítják össze. Javítja abban a rugalmasságot, hogy ki, hol, hogyan és mikor hozzon létre objektumokat.[4]

Összefoglalás[szerkesztés]

Ebbe a csoportba olyan minták tartoznak, amelyek osztályok vagy objektumok létrehozására adnak módszert. Két nagyon fontos alapelv jellemzi őket: az egyik, hogy magukba zárják azt a tudást, ami mindehhez szükséges, a másik, hogy a kliens számára ez a tudás rejtve marad. Ez, mint majd látni fogjuk, azért nagyon hasznos, mert így egységbe zárjuk magát a létrehozás folyamatát, és nincs és nem is lehet beleszólása ebbe más osztályoknak vagy objektumoknak. Így egységbe zárjuk ami változik, és egyetlen megfelelő helyen végezzük az új osztályok vagy objektumok megalkotását. A létrehozási minták további jellemzője még a nagy rugalmasság a változtatások iránt.

A szerkezeti minták lényege az osztályokból és objektumokból nagyobb szerkezetek létrehozása. Amennyiben osztályokkal dolgozunk, örökléssel vagy felületek megvalósításával összetételeket hozunk létre, például több interfész implementálásával egy többféleképpen is viselkedő osztályt. Objektumok esetében dinamikus „összeragasztásukkal” érjük el az olyan összetételek létrejöttét, amelyek kellően rugalmasak.

A GoF[1] könyv szerint ebbe a csoportba a következő minták tartozik az első öt, a hatodik pedig a könyv megjelenése után került a köztudatba (a párhuzamos minták megjelenésével).

Szerkezet[szerkesztés]

Fájl:Creational Pattern Simple Structure.png
Létrehozási osztálydiagram

A létrehozási minták alapszerkezetét a mellékelt osztálydiagram mutatja. A különböző minták tartalmazhatnak további elemeket is, különböző kapcsolatokkal.

Részt vevők:

  • Creator: Absztrakt felületet (interfészt) nyújt, a létrehozó metódussal.
  • ConcreteCreator: A konkrét létrehozó objektum, ami megvalósítja a létrehozást.

Felhasználás[szerkesztés]

Mivel többet használják a kompozíciót, mint az öröklődést, célszerű több egyszerűbb viselkedésből összerakni egy összetettet (aggregáció).[8] Az objektumok szoros csatolása rontja az újrafelhasználhatóságot, mivel ahhoz, hogy új partnert adjunk meg, vagy jól kell ismerni a kódot, és kicserélni a megfelelő helyeken, vagy felülírni vagy örökölni. Könnyű elhibázni, és nehéz a hibát megtalálni. A tervminták általában lazább csatolást vezetnek be, ezzel rugalmasabbá teszik a programot. A létrehozási minták a létrehozást különítik el, és függetlenné teszik a klienst a létrehozandó objektum konkrét típusától.[9]

Létrehozási tervmintára lehet szükség, ha:

  • A rendszernek attól függetlenül kell működnie, hogyan hozták létre az objektumait. (absztrakt gyár, gyártó metódus)
  • Összetartozó objektumokat tartalmaz. (absztrakt gyár, gyártó metódus)
  • El kívánja rejteni egy osztálykönyvtár vagy termék részleteit, és csak az interfészt nyilvánosságra hozni
  • Független összetett objektumok különböző reprezentálására van szükség. (építő)
  • Egy osztály alosztályaira akarjuk hagyni, miképp hoznak létre objektumokat. (absztrakt gyár)
  • Az osztály példányosításáról a rendszer futás időben dönt. (lusta példányosítás)
  • Biztosítani kell, hogy egyetlen példány jöjjön létre egy adott osztályból, és minden kliens ezt használja. (egyke)
  • Módosítás nélkül lehessen bővíteni a példányt. (építő)

Kapcsolódó szócikkek[szerkesztés]

Jegyzetek[szerkesztés]

  1. a b Desing Patterns (könyv), i. m. 
  2. Design Patterns. Massachusetts: Addison-Wesley, 81. o. (1995). ISBN 978-0-201-63361-0. Hozzáférés ideje: 2015. május 22. 
  3. Design Patterns. Massachusetts: Addison-Wesley (1995). ISBN 978-0-201-63361-0. Hozzáférés ideje: 2015. május 22. 
  4. Judith, Bishop. C# 3.0 Design Patterns. California: O'Reilly Media, 336. o. (2007). ISBN 978-0-596-52773-0. Hozzáférés ideje: 2015. május 22. 
  5. Head First Design Patterns. California: O'Reilly Media, 156. o. (2004). ISBN 978-0-596-00712-6. Hozzáférés ideje: 2015. május 22. 
  6. Head First Design Patterns. California: O'Reilly Media, 134. o. (2004). ISBN 978-0-596-00712-6. Hozzáférés ideje: 2015. május 22. 
  7. Head First Design Patterns. California: O'Reilly Media, 177. o. (2004). ISBN 978-0-596-00712-6. Hozzáférés ideje: 2015. május 22. 
  8. Design Patterns. Massachusetts: Addison-Wesley, 84. o. (1995). ISBN 978-0-201-63361-0. Hozzáférés ideje: 2015. május 22. 
  9. Design Patterns. Massachusetts: Addison-Wesley, 85. o. (1995). ISBN 978-0-201-63361-0. Hozzáférés ideje: 2015. május 22. 

Források[szerkesztés]

  • Gamma, Helm, Johnson & Vlissides. Design Patterns (könyv). Addison-Wesley (1994). ISBN 0-201-63361-2 

Fordítás[szerkesztés]

Ez a szócikk részben vagy egészben a Creational pattern című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.