Iterator
Design Pattern
This design
pattern provides a way to access the elements of an aggregate object
sequentially without exposing its underlying representation. It also places the
task of the traversal, not on the aggregator, but on the internal implementer.
E.g. :If there are
2 lists with similar objects to iterate, and one uses the arrays and other uses
a linklist, use this design pattern.
public interface I_ItemHolder {
public I_Iterator
createIterator();
}
public interface I_Iterator {
public boolean hasNext();
public Item next();
}
public class List_ItemHolder implements I_ItemHolder {
private List<Item> items;
public
List_ItemHolder(List<Item> items) {
super();
this.items = items;
}
@Override
public I_Iterator
createIterator() {
return new List_Iterator(items.iterator());
}
class List_Iterator implements I_Iterator
{
private
Iterator<Item> it;
public
List_Iterator(Iterator<Item> it) {
this.it = it;
}
@Override
public boolean hasNext() {
return it.hasNext();
}
@Override
public Item next() {
return it.next();
}
}
}
public class Array_ItemHolder implements I_ItemHolder {
private Item[] items;
public
Array_ItemHolder(Item[] items) {
super();
this.items = items;
}
@Override
public I_Iterator
createIterator() {
return new Array_Iterator(this.items);
}
class Array_Iterator implements I_Iterator
{
private int index = -1;
private Item[] items;
public
Array_Iterator(Item[] items) {
this.items = items;
}
@Override
public boolean hasNext() {
if(items.length > (index+1)) {
return true;
}
else {
return false;
}
}
@Override
public Item next() {
return items[++index];
}
}
}
public class Item {
private String name;
private int age;
public Item(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString()
{
return "Name : "+name+" Age : "+age;
}
}
public class MainClass {
public static void main(String[]
args) {
Item
it1 = new Item("John",22);
Item
it2 = new Item("Rebecca",25);
Item
it3 = new Item("Andrew",26);
List
<Item> itemList = new ArrayList<Item>();
itemList.add(it1);itemList.add(it2);itemList.add(it3);
Item[]
itemArray = {it1,it2,it3};
System.out.println("---Using List Item Holder---");
I_ItemHolder
ith = new List_ItemHolder(itemList);
I_Iterator
ii = ith.createIterator();
while(ii.hasNext()) {
System.out.println(ii.next());
}
System.out.println("---Using Array Item Holder---");
ith
= new Array_ItemHolder(itemArray);
ii
= ith.createIterator();
while(ii.hasNext()) {
System.out.println(ii.next());
}
}
}
Code link : https://github.com/sksumit1/DesignPatterns
No comments:
Post a Comment