Iterator minta java-ban
Az Iterator olyan magatartási tervezési mintázat, amely lehetővé teszi, hogy az egyes összetett objektumok összes elemén keresztül járjon. A minta végrehajtásának egyik fontos feltétele, hogy az iterátornak biztosítania kell, hogy az objektum belső struktúráját ne hozzák nyilvánosságra.
A Java-ban az iterátorokat nagyon sokan használják a gyűjtési keretrendszerben. Ebből a célból java.util.Iterator nevű, speciálisan létrehozott interfész jött létre. Az interfész a következő módszereket tartalmazza:
- hasNext () - Boolean értéket ad vissza, attól függően, hogy van-e több elem a gyűjteményben.
- következő () - A gyűjtemény következő elemét adja vissza. Az API-val összhangban a módszernek el kell dobnia a NoSuchElementException-et, ha az összes elem már átkerült.
- remove () - eltávolítja az utolsó hívás által visszaadott elemet. Van néhány kérdésem a módszerhez :) - miért van valójában az interfész, mert nem minden gyűjtemény lehetővé teszi a tételek törlését, elvégre csak olvasható gyűjtemények vannak. Ezért, mivel a Java 1.8, az eltávolítási módszer az alapértelmezettként van leírva az alapértelmezett megvalósítással: default void remove ()
Lássunk egy osztályt, és hajtsuk végre az Iterator-t.
Tegyük fel, hogy szörnyű szörnyeteg van, amely a fejből, a karokból és a lábakból áll. Mindegyik részhez van egy szetter, egy getter, és egyben a kényelem számára is egy olyan módszer, amely megmutatja nekünk egy rész jelenlétét vagy hiányát.
Az iterátor osztály ugyanabba a fájlba helyezhető. Hagyja, hogy az index (index) legyen felelős az ún. Kurzorért az iterátorban. Az új objektum létrehozásakor -1-es érték kerül beállításra. A 0, 1 és 2 értékek megfelelnek a fejnek, a karnak és a lábnak.
Végrehajtsa az elkövetkező, az elkövetkező és eltávolítási módszereket. Egyébként az eltávolítás nem valósítható meg a Java 1.8 verziója óta. Ebben az esetben az alapértelmezett végrehajtás kerül alkalmazásra (lásd a cikk elejét).
Az iterátor végrehajtása nem volt nagyon szép. Csak azt akartam mutatni, hogy nem csak a gyűjteményen, hanem bármely összetett tárgyon is megcsinálhatod.
Annak érdekében, hogy kényelmesebb legyen egy iterátor példány létrehozása, az Iterable felületet az iterator () metódussal vezettük be. A Monster osztályt leírhatod ennek az interfésznek a végrehajtásakor, és az iterátor módszert így hajthatja végre:
By the way, egy érdekes kérdés egy piszkos trükk a rajongók a tervezési minták: Példa, amely minta az iterator () módszer a java.util.Collection? A helyes válasz a gyári módszer. Valójában az a döntés, hogy mely iterátort hozzon létre az osztályok örököseinek (ArrayList, LinkedList, HashSet és így tovább).
Ha bármilyen kérdése van, írjon.