Chapters
Iterator pattern is a design pattern used to access and traverse a collection such as a list. This pattern decouples algorithms from containers.
Some programming languages have built-in iterator in them. Those built-in and general-purpose iterators are can solve most problems and I recommend using them. For example, java provides Iterator interface that is used to traverse collections such as ArrayList and others.
This diagram shows a structure of an iterator pattern
This example demonstrates iterator pattern. Take note that this example is just a mere demonstration and not recommended to be reproduced in production.
Iterator Pattern
Iterator pattern is a design pattern used to access and traverse a collection such as a list. This pattern decouples algorithms from containers.
Some programming languages have built-in iterator in them. Those built-in and general-purpose iterators are can solve most problems and I recommend using them. For example, java provides Iterator interface that is used to traverse collections such as ArrayList and others.
This diagram shows a structure of an iterator pattern
Courtesy of Wikipedia
This example demonstrates iterator pattern. Take note that this example is just a mere demonstration and not recommended to be reproduced in production.
import java.util.List;
import java.util.ArrayList;
public class ClientCode{
public static void main(String[] args){
Aggregate collection =
new ConcreteAggregate();
collection.add("A");
collection.add("B");
collection.add("C");
collection.add("D");
collection.add("E");
SampleIterator iterator =
collection.createIterator();
while(iterator.hasNext())
System.out.println(iterator.next());
}
}
/*
Assume classes below are in different package
and they're all public except for
ConcreteIterator class
*/
interface Aggregate{
void add(String element);
SampleIterator createIterator();
}
class ConcreteAggregate implements Aggregate{
private List<String> list;
private SampleIterator iterator;
ConcreteAggregate(){
list = new ArrayList<>();
}
@Override
public void add(String element){
list.add(element);
}
@Override
public SampleIterator createIterator(){
return new ConcreteIterator(list);
}
}
interface SampleIterator{
String next();
boolean hasNext();
}
class ConcreteIterator implements SampleIterator{
private List<String> list;
private int pointer;
ConcreteIterator(List<String> list){
this.list = list;
}
@Override
public String next(){
if(pointer >= list.size())
throw new ArrayIndexOutOfBoundsException();
String result = list.get(pointer);
pointer++;
return result;
}
@Override
public boolean hasNext(){
if(pointer >= list.size())
return false;
else
return true;
}
}
Result
A
B
C
D
E
No comments:
Post a Comment