A 7 legfontosabb szoftvertervezési minta

A szoftvertervezési minták témájának átfogó mélyebb bemerüléséhez olvassa el a C.H. által készített Szoftvertervezési minták: Legjobb gyakorlatok a fejlesztők számára című cikket. Afzal, veterán szoftvermérnök, több éves tapasztalattal a Netflix, a Microsoft és az Oracle számára. Az alábbiak nagy részét az ő tanfolyamát foglalja össze.

Miért tervez mintákat?

A tervezési minták az utóbbi időben némi vita tárgyát képezték a programozási világban, nagyrészt annak köszönhetően, hogy észlelt „túlhasználatuk” olyan kódhoz vezet, amelyet nehezebb megérteni és kezelni.

Fontos megérteni, hogy a formatervezési mintákat soha nem szándékoztuk összecsapni olyan hivatkozásokkal, amelyek véletlenszerűen, mindenki számára egységes módon alkalmazhatók a kódjára. Végül nem helyettesítheti a valódi problémamegoldó képességet a szoftverfejlesztésben.

Az a tény azonban, hogy a tervezési minták hihetetlenül hasznosak lehetnek, ha megfelelő helyzetekben és megfelelő okokból használják őket. Stratégiai felhasználásuk révén a programozó jelentősen hatékonyabbá teheti azáltal, hogy lehetővé teszi számukra a közmondásos kerék újbóli feltalálásának elkerülését, ahelyett, hogy mások már finomították. Hasznos közös nyelvet kínálnak az ismételt problémák és megoldások fogalmának megfogalmazására, amikor másokkal tárgyalnak vagy kódot kezelnek nagyobb csapatokban.

Fontos figyelmeztetés ugyanakkor annak biztosítására, hogy az egyes minták mögött meghúzódó módot és miért is megértsék a fejlesztőnek.

További beavatkozás nélkül (általános jelentőségű sorrendben, a legtöbbtől a legkevésbé):

A legfontosabb tervezési minták

  1. Szingli

A szingulett mintát arra használják, hogy az osztály létrehozását csak egy objektumra korlátozzák. Ez akkor hasznos, ha egy (és csak egy) objektumra van szükség a tevékenységek koordinálásához a rendszeren. Számos példa van arra, hogy csak egy osztály példányának léteznie kell, ideértve a gyorsítótárakat, a szálkészleteket és a nyilvántartásokat.

Triviaális egy osztályobjektum kezdeményezése - de hogyan biztosíthatjuk, hogy csak egy objektum készüljön el? A válasz az, hogy az építőt „magántulajdonba” hozzuk azzal az osztálymal, amelyet szingletonként kívánunk meghatározni. Ilyen módon csak az osztály tagjai férhetnek hozzá a magánépítőhöz, és senki máshoz.

Fontos megjegyzés: Lehetőség van egy szingulett alosztályba sorolására, ha a konstruktort privát helyett védettvé teszik. Ez bizonyos körülmények között megfelelő lehet. Az ezekben a forgatókönyvekben alkalmazott egyik megközelítés az alosztályok szingulettumainak nyilvántartásának létrehozása, és a getInstance módszer beépíthet egy paramétert, vagy felhasználhat egy környezeti változót a kívánt szingleton visszaadására. A nyilvántartás ezután fenntartja a karakterláncnevek leképezését szingulett objektumokhoz, amelyekhez szükség szerint hozzáférhetünk.

2. Gyári módszer

Normál gyár termékeket állít elő; egy szoftvergyár objektumokat állít elő. És nemcsak hogy ez történik, anélkül hogy meghatározná a létrehozandó objektum pontos osztályát. Ennek megvalósításához objektumokat gyári módszer meghívásával hoznak létre, ahelyett, hogy kivitelt hívnának.

Az objektumok létrehozása a Java-ban általában így történik:

SomeClass someClassObject = new SomeClass ();

A fenti megközelítés problémája az, hogy a SomeClass objektumát használó kód hirtelen függ a SomeClass konkrét megvalósításától. Nincs semmi baj az új objektumok létrehozásával, de azzal jár, hogy a kódot szorosan összekapcsoljuk a konkrét megvalósítási osztályba, ami időnként problematikus lehet.

3. Stratégia

A stratégiai minta lehetővé teszi a kapcsolódó algoritmusok absztrakció szerinti csoportosítását, amely lehetővé teszi az egyik algoritmus vagy házirend kicserélését a másikra az ügyfél módosítása nélkül. Az egyetlen algoritmus közvetlen megvalósítása helyett a kód futási utasításokat kap, amelyek meghatározzák, melyik algoritmuscsoportot kell futtatni.

4. Megfigyelő

Ez a minta egy-egy függőség az objektumok között, így amikor egy objektum megváltoztatja az állapotot, az összes hozzátartozóját értesítjük. Ez általában úgy történik, hogy meghívják az egyik módszerüket.

Az egyszerűség kedvéért gondoljon arra, hogy mi történik, ha követ valakivel a Twitteren. Alapvetően azt kérdezi a Twittertől, hogy küldje el neked (megfigyelő) tweet frissítéseket a követett személyről (a tárgyról). A minta két szereplőből áll: a megfigyelőből, akit érdekel a frissítések, és a témából, aki a frissítéseket generálja.

Egy alanynak sok megfigyelője lehet, és az egytől a sokhoz viszonyulhat. A megfigyelő azonban szabadon feliratkozhat más alanyok frissítéseire is. Feliratkozhat egy hírcsatornára egy Facebook oldalról, amely a téma lenne, és ha az oldal új üzenettel rendelkezik, az előfizető látja az új üzenetet.

Fő szempont: sok alany és kevés megfigyelő esetén, ha mindegyik alany külön tárolja megfigyelőit, ez növeli a tárolási költségeket, mivel egyes alanyok ugyanazt a megfigyelőt többször tárolják.

5. Építő

Ahogy a neve is sugallja, az építő mintát használják az objektumok építéséhez. Időnként az általunk létrehozott tárgyak összetettek lehetnek, több részobjektumból állhatnak, vagy bonyolult építési folyamatot igényelhetnek. Az összetett típusok létrehozásának gyakorlata egyszerűsíthető az építő minta használatával. Az összetett vagy összesített objektum az, amit az építő általában épít.

Fő szempont: Az építőmintázat hasonlónak tűnik az „elvont gyári” mintázathoz, de az egyik különbség az, hogy az építőmintázat lépésről lépésre létrehoz egy objektumot, míg az absztrakt gyári minta az objektumot egyszerre adja vissza.

6. Adapter

Ez lehetővé teszi, hogy az inkompatibilis osztályok együtt működjenek az egyik osztály interfészének másikra konvertálásával. Gondolj rá mint egyfajta fordítóra: amikor két olyan államfő találkozik, akik nem beszélnek közös nyelven, általában egy tolmács ül kettőjük közé, és lefordítja a beszélgetést, ezáltal lehetővé téve a kommunikációt.

Ha két alkalmazásuk van, az egyiknek az XML formátumban van kimenetele, a másiknak JSON-bemenetre van szüksége, akkor adapterre lesz szüksége a kettő között, hogy azok zökkenőmentesen működjenek.

7. Állam

Az állapotmintázat felsorolja azokat a különféle állapotokat, amelyekben a gép lehet, és lehetővé teszi az objektum számára, hogy megváltoztassa viselkedését, amikor belső állapota megváltozik. A gépen vagy a kontextusban, amint azt minta-beszédben hívják, elvégezhetők olyan műveletek, amelyek különböző állapotokba mozgatják. A minta használata nélkül a kód rugalmatlanná válik, és tele van if-else feltételes feltételekkel.

Szeretné folytatni a tanulást?

A szoftvertervezési mintákkal: A bevált gyakorlatok a fejlesztők számára lehetősége van többre, mint csupán az elmélet elolvasására. Képes lesz mélyen belemerülni a valódi problémákba, és megérteni a gyakorlati megoldásokat a valós életbeli példákkal.

A tanfolyam a Négy Gang népszerű könyvén alapszik, ám interaktív, könnyen emészthető formában mutatják be. Interaktív módon elsajátítja a könyv 23 híres tervezési mintáját, megtanulja a három kulcsfontosságú tervezési mintázat (alkotó, szerkezeti és viselkedési) megfelelő alkalmazását, és megtanulja beépíteni ezeket a tervezési mintákat saját projektjeibe.

Nézze meg most.

Eredetileg a blog.educative.io oldalon, 2018. november 7-én tették közzé.