A Template Method Pattern megvalósítása Java-ban

1. Áttekintés

Ebben a gyors bemutatóban megnézzük, hogyan lehet kihasználni a sablon módszer mintáját - az egyik legnépszerűbb GoF mintát.

Ez megkönnyíti a komplex algoritmusok megvalósítását azáltal, hogy a logikát egyetlen módszerbe foglalja.

2. Végrehajtás

A sablon módszer mintázatának bemutatásához készítsünk egy egyszerű példát, amely egy számítógépes állomás felépítését ábrázolja.

Tekintettel a minta definíciójára, az algoritmus felépítését egy alaposztályban határozzuk meg, amely meghatározza a sablont épít() módszer:

public abstract class ComputerBuilder {// ... public final Computer buildComputer () {addMotherboard (); setupMotherboard (); addProcessor (); adjon vissza új számítógépet (computerParts); } public abstract void addMotherboard (); public abstract void setupMotherboard (); public abstract void addProcessor (); // ...}

A ComputerBuilder osztály felelős a számítógép felépítéséhez szükséges lépések felvázolásáért a különböző összetevők hozzáadásának és beállításának módszereinek deklarálásával, például egy alaplap és egy processzor.

Itt, a épít() módszer a sablon módszer, amely meghatározza a számítógép alkatrészeinek összeszereléséhez szükséges algoritmus lépéseit, és teljesen inicializálva tér vissza Számítógép példányok.

Figyeljük meg, hogy it-nek nyilvánítják végső hogy ne lehessen felülírni.

3. Műveletben

Ha az alaposztály már be van állítva, próbáljuk meg használni két alosztály létrehozásával. Az egyik „normál” számítógépet, a másik pedig „csúcskategóriás” számítógépet épít:

a public class StandardComputerBuilder kiterjeszti a ComputerBuilder {@Override public void addMotherboard () {computerParts.put ("alaplap", "standard alaplap"); } @Override public void setupMotherboard () {motherboardSetupStatus.add ("A szokásos alaplap csavarozása a tokhoz."); motherboardSetupStatus.add ("A tápcsatlakozók csatlakoztatása."); alaplapSetupStatus.forEach (lépés -> System.out.println (lépés)); } @Orride public void addProcessor () {computerParts.put ("Processzor", "Normál processzor"); }}

És itt van a HighEndComputerBuilder változat:

public class HighEndComputerBuilder kiterjeszti a ComputerBuilder {@Override public void addMotherboard () {computerParts.put ("alaplap", "csúcskategóriás alaplap"); } @Override public void setupMotherboard () {motherboardSetupStatus.add ("A csúcskategóriás alaplap csavarozása a tokhoz."); motherboardSetupStatus.add ("A tápcsatlakozók csatlakoztatása."); alaplapSetupStatus.forEach (lépés -> System.out.println (lépés)); } @Orride public void addProcessor () {computerParts.put ("Processor", "High-end Processor"); }}

Mint láthatjuk, nem a teljes összeszerelési folyamat miatt kellett aggódnunk, hanem csak azért, hogy külön módszerek megvalósításait biztosítsuk.

Most lássuk működés közben:

új StandardComputerBuilder () .buildComputer (); .getComputerParts () .forEach ((k, v) -> System.out.println ("Rész:" + k + "Érték:" + v)); új HighEndComputerBuilder () .buildComputer (); .getComputerParts () .forEach ((k, v) -> System.out.println ("Rész:" + k + "Érték:" + v));

4. Sablon módszerek a Java Core könyvtárakban

Ezt a mintát széles körben használják a Java magkönyvtárakban, például a java.util.AbstractList vagy a java.util.AbstractSet.

Például, Absztrakt lista csontvázas megvalósítását biztosítja a Lista felület.

A sablon módszerre példa lehet a az összes hozzáadása() módszer, bár ezt nem határozzák meg kifejezetten végső:

public logikai addAll (int index, c gyűjtemény) {rangeCheckForAdd (index); logikai érték módosítva = hamis; for (E e: c) {add (index ++, e); módosított = igaz; } return módosítva; }

A felhasználóknak csak a add () módszer:

public void add (int index, E elem) {dobjon új UnsupportedOperationException (); }

Itt a programozó feladata, hogy megvalósítást biztosítson egy elem hozzáadásához a listához az adott indexnél (a felsorolási algoritmus variáns része).

5. Következtetés

Ebben a cikkben bemutattuk a sablon metódus mintázatát és annak megvalósítását a Java-ban.

A sablon módszer mintája elősegíti a kód újrafelhasználását és szétválasztását, de az öröklés használatának rovására.

Mint mindig, a cikkben bemutatott összes kódminta elérhető a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found