Heim >Backend-Entwicklung >PHP-Tutorial >Was ist ein Iterator in PHP?
Was ist das Iteratormuster?
Definition: Bietet eine Möglichkeit, nacheinander auf die Elemente in einem Aggregatobjekt zuzugreifen, ohne die interne Anzeige des Objekts offenzulegen
Das Folgende ist das Strukturdiagramm des Iteratormusters:
Der folgende Beispielcode bietet ein kurzes Verständnis:
//抽象聚合类 abstract class Aggregate { public abstract Iterator CreateIterator(); } //具体聚合类 class ConcreteAggregate : Aggregate { private IList<object> items = new List<object>(); public override Iterator CreateIterator() { return new ConcreteIterator(this); } public int Count { get { return items.Count; } } public object this[int index] { get { return items[index]; } set { items.Insert(index, value); } } } //抽象迭代器类 abstract class Iterator { public abstract object First(); public abstract object Next(); public abstract bool IsDone(); public abstract object CurrentItem(); } //具体迭代器类 class ConcreteIterator : Iterator { private ConcreteAggregate aggregate; private int Current = 0; public ConcreteIterator(ConcreteAggregate aggregate) { this.aggregate = aggregate; } public override object CurrentItem() { return aggregate[Current]; } public override object First() { return aggregate[0]; } public override bool IsDone() { return Current >= aggregate.Count ? true : false; } public override object Next() { object ret = null; Current++; if(Current<aggregate.Count) { ret = aggregate[Current]; } return ret; } } static void Main(string[] args) { ConcreteAggregate aggregate = new ConcreteAggregate(); aggregate[0] = "michael"; aggregate[1] = "jarle"; aggregate[2] = "cumming"; aggregate[3] = "andy"; ConcreteIterator iterator = new ConcreteIterator(aggregate); iterator.First(); while (!iterator.IsDone()) { Console.WriteLine($"{iterator.CurrentItem()},请打卡后再下班"); iterator.Next(); } Console.Read(); }
Analyse : Denken Sie darüber nach: Wenn wir das Sammlungsobjekt und die Operationen für das Sammlungsobjekt zusammenfügen und die Elemente im Sammlungsobjekt auf andere Weise durchlaufen möchten, müssen wir das Sammlungsobjekt ändern, was gegen die „ Prinzip der Einzelverantwortung“, und das Iteratormuster trennt die Datenstruktur und den Algorithmus der Datenstruktur, und beide können unabhängig voneinander entwickelt werden.
Vorteile:
1. Unterstützt mehrere Traversierungsmethoden. Beispielsweise stellen wir in einer geordneten Liste je nach Bedarf zwei Iteratoren für die Durchquerung in Vorwärtsrichtung und die Durchquerung in umgekehrter Reihenfolge bereit. Benutzer müssen nur unseren Iterator dazu bringen, Durchlaufoperationen für die Sammlung durchzuführen
2. Vereinfachte Aggregatklassen. Aufgrund der Einführung von Iteratoren muss das ursprüngliche Sammlungsobjekt die Sammlungselemente nicht selbst durchlaufen
3 Es ist sehr praktisch, neue Aggregationsklassen und Iteratorklassen hinzuzufügen, und die beiden Dimensionen können unabhängig voneinander geändert werden
4. Stellen Sie eine einheitliche Schnittstelle für verschiedene Sammlungsstrukturen bereit und unterstützen Sie so den gleichen Algorithmus für die Arbeit mit verschiedenen Sammlungsstrukturen
Nachteile:
1. Iteration Das Iteratormuster trennt die Verantwortlichkeiten für das Speichern von Daten und das Durchlaufen von Daten. Wenn Sie ein neues Sammlungsobjekt hinzufügen, erhöht sich die Anzahl der Klassen paarweise, was die Systemkomplexität bis zu einem gewissen Grad erhöht
Verwendungsszenarien:
1. Greifen Sie auf den Inhalt eines Aggregatobjekts zu, ohne seine interne Anzeige freizugeben 2. Es müssen mehrere Durchlaufmethoden für das Aggregatobjekt bereitgestellt werden 3 .Stellen Sie eine einheitliche Schnittstelle zum Durchqueren verschiedener Aggregatstrukturen bereitDas obige ist der detaillierte Inhalt vonWas ist ein Iterator in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!