JavaScript objektumorientált minták:

A kód szervezése sok fájdalomtól ment meg minket. Az objektumorientált programozás jellemzőit felhasználva bizonyos tervezési mintákat alkalmazhatunk a jobb olvashatóság elérése, a redundancia csökkentése és szükség esetén absztrakciók létrehozása érdekében. Az egyik ilyen minta a gyári minta.

A gyári minta egyfajta objektumorientált minta, amely a DRY módszertant követi. Ahogy a neve is mutatja, az objektumpéldányokat úgy hozzuk létre, hogy egy gyár segítségével elkészítjük számunkra a szükséges objektumot.

Nézzünk egy nagyon egyszerű példát a gyári minta használatára egy alligator objektum összeállításához. Ehhez először is gyárakat kell készítenünk, amelyek létrehozzák számunkra a alligator részeket:

class TailFactory { constructor(props) { this.tailLength = props.tailLength; }};class TorsoFactory { constructor(props) { this.color = props.color; }};class HeadFactory { constructor(props) { this.snoutLenth = props.snoutLenth; }};

Ezután létrehozunk egy osztályt, amely közvetítőként működik a tényleges gyárak osztályai és a felhasználó között. Nevezzük ezt ReptilePartFactory-nak:

class ReptilePartFactory { constructor(type, props) { if(type === "tail") return new TailFactory(props); if(type === "torso") return new TorsoFactory(props); if(type === "head") return new HeadFactory(props); }};

Lépjünk most előre és rakjuk össze a tényleges aligátort, és használjuk a ReptilePartFactory-t, hogy megszerezzük a számunkra szükséges alkatrészeket:

let alligator = {};let alligatorProps = { tailLength : 2.5, color: "green", snoutLenth: 1};//gets a tail from the tail factoryalligator.tail = new ReptilePartFactory("tail", alligatorProps); //gets a torso from the torso factoryalligator.torso = new ReptilePartFactory("torso", alligatorProps);//gets a head from the head factoryalligator.head = new ReptilePartFactory("head", alligatorProps);

Nézzük meg a fenti mintát, úgy tűnik, hogy ugyanezt a ReptilePartFactory-t használhatjuk az aligátorszerű objektumok alkatrészeinek létrehozására. A háttérben lévő gyáraknak soha nem kellene tudniuk a végső objektum természetéről.

A gyárminta használata tehát bizonyos előnyöket biztosít számunkra:

  • Dinamikus objektumkészítés: Olyan esetekben használható, amikor az objektum típusa a futási időben dől el.
  • Absztrakció: A felhasználónak valójában soha nem kell hozzáférnie a tényleges objektum konstruktorához.
  • Újrafelhasználhatóság/karbantarthatóság:

Most, hogy némileg megértettük a gyári mintát, vizsgáljuk meg egy kicsit a jobb gyári minta kód írását.

A fenti példa egy if-létrát használ annak megállapítására, hogy a felhasználó bemenete alapján melyik gyárat kell meghívni. Ez egy egyszerű megvalósítás, intuitív és nem túl nyitott a változtatásokra. Ha később új részeket szeretnénk hozzáadni, akkor meg kellene zavarni a ReptilePartFactory. Ez sérti a SOLID alapelveket, amelyek szerint “A szoftver entitásoknak (osztályok, modulok, függvények stb.) nyitottnak kell lenniük a bővítésre, de zártnak a módosításra.”

Hogyan lenne, ha a gyári osztályokat egy objektumban tárolnánk, és a kívánt alkatrészgyárat hívnánk a kívánt alkatrész kulcsként való használatával? Először regisztrálnunk kellene a gyárakat, ez olyan egyszerű lenne, mint:

let registeredPartFactories = {};registeredPartFactories = class TailFactory{ ...};registeredPartFactories = class TorsoFactory { ...};registeredPartFactories = class HeadFactory { ...};

És most az absztrakt réteg így hívhatja meg a gyárakat:

class ReptilePartFactory { constructor(type, props) { return new registeredPartFactories(props); }};

Ez a megközelítés sokkal tisztább, és lehetővé teszi, hogy bővítsük a gyárainkat anélkül, hogy a ReptilePartFactory kódot befolyásolná.

Végezetül

Ezek mellett számos más objektumorientált minta is létezik, amelyek szintén növelik az olvashatóságot és a minőséget. Mielőtt tehát a gyári mintát használnánk, ellenőrizzük, hogy valóban szükség van-e rá. Ha hasonló típusú objektumokat fogsz ismételten létrehozni, és szükséged van egy olyan rétegre is, amely új példányokat hoz létre ezen objektumok felhasználásával, miközben bizonyos szintű absztrakciót biztosít a létrehozási logika számára, akkor igen – a gyári minta jó választás.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.