[GO] [Viererbande] Designmusterlernen --Iterator

Iterator-Iterator

** Inhaltsverzeichnis ** Wenn Sie eine moderne Sprache verwenden, müssen Sie dieses Muster nicht implementieren.

Aber werden Sie in die Fußstapfen unserer Vorgänger treten, wenn es in der Standardbibliothek keine solchen Module gab? Ich werde es mit implementieren.

Zweck

Bietet eine Möglichkeit, nacheinander auf Elemente eines Aggregatobjekts zuzugreifen, ohne die zugrunde liegende interne Darstellung verfügbar zu machen.

(Wenn Sie List fest definieren, wird dies folgendermaßen ausgedrückt ...)

Komponente

-Abstraktklasse für den Zugriff auf Iterator-Elemente in der angegebenen Reihenfolge ・ Konkrete Klasse der ConcreteIterator Iterator-Klasse

-Concrete Aggregate Aggregate-Klasse konkrete Klasse

Implementierung

Lassen Sie uns so etwas wie Javas Iterator implementieren. Welche Implementierung und wann sollten ** Aggregat ** und ** Betonaggregat ** verwendet werden? Ich denke, dass es unnötig ist, wenn Iterator im generischen Typ implementiert ist.

Abstrakte Klasse für den sequentiellen Zugriff auf Iterator-Elemente

Iterator.kt


package iterator

interface Iterator<T> {
    var index: Int
    var list: ArrayList<T>

    /**
     *Holen Sie sich das indexth Element
     */
    fun elementAt(index: Int): T

    /**
     *Überprüfen Sie, ob noch Elemente vorhanden sind
     */
    fun hasNext(): Boolean

    /**
     *Holen Sie sich das nächste Element
     */
    fun next(): T

    /**
     *Fügen Sie ein Element hinzu
     */
    fun add(element: T)

    /**
     *Löschen Sie das indexth-Element
     */
    fun remove(index: Int)
}

ConcreteIterator Iterator-Klasse Betonklasse

ConcreteIterator.kt


package iterator

class ConcreteIterator<T>(vararg elements: T): Iterator<T> {

    override var index = 0
    override var list = ArrayList<T>()

    init {
        list.addAll(elements)
    }

    override fun elementAt(index: Int): T {
        return list[index]
    }

    override fun hasNext(): Boolean {
        return index != list.size
    }

    override fun next(): T {
        return list[index++]
    }

    override fun add(element: T) {
        list.add(element)
    }

    override fun remove(index: Int) {
        list.removeAt(index)
    }
}s

Menschen, die verwenden

Client.kt


package iterator

class Client {
    init {
        val strIterator = makeStrIterator()
        while(strIterator.hasNext()) {
            println(strIterator.next())
        }

        val intIterator = makeIntIterator()
        while (intIterator.hasNext()) {
            println(intIterator.next())
        }
    }

    private fun makeStrIterator(): Iterator<String> {
        val iterator = ConcreteIterator("Ichi", "Zu", "Herr.")
        iterator.add("Yon")

        return iterator
    }

    private fun makeIntIterator(): Iterator<Int> {
        return ConcreteIterator(1, 2, 3)
    }
}

Ausgabeergebnis

[out-put]
Ichi
Zu
Herr.
Yon
1
2
3

Mit dem oben Gesagten konnte ich die Nöte meiner Vorgänger kennenlernen.

Recommended Posts

[Viererbande] Designmusterlernen --Iterator
[Viererbande] Designmuster lernen
[Viererbande] Design Pattern Learning --Decorator
[Viererbande] Designmuster lernen --Besucher
[Viererbande] Design Pattern Learning - Vermittler
[Viererbande] Designmuster lernen - Fassade
[Viererbande] Design Pattern Learning - Composite
[Viererbande] Designmuster lernen - Prototyp
[Viererbande] Designmuster lernen - Andenken
[Viererbande] Designmuster lernen - Staat
[Vierergruppe] Design Pattern Learning - Interpreter
[Viererbande] Design Pattern Learning - Builder
[Viererbande] Designmuster lernen - Brücke
[Viererbande] Designmuster lernen --Proxy
[Viererbande] Design Pattern Learning - Strategie
[Viererbande] Designmuster lernen --Adapter
[Viererbande] Design Pattern Learning - Beobachter
[Viererbande] Designmuster lernen - Befehl
[Viererbande] Designmuster lernen - Fluggewicht
[Viererbande] Designmusterlernen - Abstract Factory
[Viererbande] Designmuster lernen - Fabrikmethode
[Viererbande] Designmuster lernen - Kette der Verantwortung
[Viererbande] Design Pattern Learning - Template-Methode
Gang of Four (GoF) -Muster in Python
Lernen Sie das Entwurfsmuster "Iterator" mit Python
Entwurfsmuster #Builder
Entwurfsmuster #Decorator
Lernen der Mustererkennung im Video Teil 1 Bereich der Mustererkennung
Entwurfsmuster #Observer
Entwurfsmuster #Facade
Entwurfsmuster #Strategie
Entwurfsmuster #Singleton
Entwurfsmuster #Proxy
Ich habe ein Designmuster in Kotlin geschrieben, das von Iterator bearbeitet wurde
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Entwurfsmuster #Factory-Methode
Iteratormuster in Java
Deep Learning 1 Übung des Deep Learning
Entwurfsmuster # Template-Methode
Die Geschichte, dass GoF-Designmuster nichts anderes sind als "Einführung abstrakter Ebenen"