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.