Iterator
Iterator
Section titled “Iterator”One-line pattern summary
Section titled “One-line pattern summary”A pattern that hides the internal structure of a collection and only exposes a way to traverse it.
Typical Unity use cases
Section titled “Typical Unity use cases”- When inventory or quest lists should be traversed consistently.
- When you want collection implementation changes to have less impact.
Parts (roles)
Section titled “Parts (roles)”- Aggregate
- Iterator
- Client
Unity example (C#)
Section titled “Unity example (C#)”The code below is a simplified Unity example based on the scenario described above.
using System.Collections;using System.Collections.Generic;
public sealed class InventoryCollection : IEnumerable<InventoryItem>{ private readonly List<InventoryItem> items = new();
public void Add(InventoryItem item) { items.Add(item); }
public IEnumerator<InventoryItem> GetEnumerator() { foreach (InventoryItem item in items) { yield return item; } }
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();}Advantages
Section titled “Advantages”- Behavior is separated into smaller units, which reduces the impact of changes.
- Adding or swapping rules is relatively safe.
Things to watch out for
Section titled “Things to watch out for”- As the number of objects and indirect calls increases, the flow can become harder to follow.
- Ordering bugs should be pinned down with tests.
Interaction diagram
Section titled “Interaction diagram”This shows the flow where sequential access is provided without exposing the internal representation.