Iterator digunakan untuk mengakses isi sebuah container secara urut tanpa harus mengetahui isi container tersebut. Container yang dimaksud adalah collection of data. Di java, Iterator dapat diterapkan dengan implement java.util.Iterator. Ada dua macam iterator yaitu internal dan eksternal.
Misalkan kita memiliki sebuah container, maka internal iterator adalah iterator yang dimaintain oleh container tersebut. Container bertanggung jawab terhadap state dari iterator dan hanya bisa ada satu iterator dalam satu container. Sedangkan eksternal iterator adalah iterator yang diletakkan dalam object terpisah dari container. Jadi sekarang ada dua object, container dan iterator, di mana container mengembalikan sebuah object bertipe iterator dalam sebuah methodnya, misalnya getIterator().
Berikut adalah contoh internal iterator :
package edu.mat.pattern.iterator;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Vector;
/**
* Internal Iterator means the collection itself needs to maintain the iterator,
* that's why this collection extends Iterator. So this class can be viewed as both
* a container and an iterator.
* */
public class InternalIterator implements Iterator
private Vector
private Enumeration
private Employee nextEmployee;
public InternalIterator() {
data = new Vector
data.add(new Employee("Santoso", "Los Angeles"));
data.add(new Employee("Rochmat", "New York"));
enumeration = data.elements();
}
@Override
public boolean hasNext() {
nextEmployee = null;
while(enumeration.hasMoreElements()) {
Employee employee = enumeration.nextElement();
nextEmployee = employee;
if(employee != null)
return true;
}
return false;
}
@Override
public Employee next() {
if(nextEmployee == null)
throw new NoSuchElementException();
else
return nextEmployee;
}
@Override
public void remove() {
// do nothing because we don't wanna remove anything
}
}
Dan berikut adalah contoh eksternal iterator yang terdiri dari container dan iterator :
package edu.mat.pattern.iterator;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class ExternalContainer {
private Vector
public ExternalContainer() {
data = new Vector
data.add(new Employee("Santoso", "Los Angeles"));
data.add(new Employee("Rochmat", "New York"));
}
public Enumeration
return data.elements();
}
public Iterator
return new ExternalIterator(this, name);
}
}
package edu.mat.pattern.iterator;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class ExternalIterator implements Iterator
private String name;
private Enumeration
private Employee nextEmployee;
public ExternalIterator(ExternalContainer employees, String name) {
this.name = name;
this.enumeration = employees.getAllEmployees();
}
@Override
public boolean hasNext() {
nextEmployee = null;
while(enumeration.hasMoreElements()) {
Employee employee = enumeration.nextElement();
nextEmployee = employee;
if(employee != null) {
if(name == null)
return true; // jika tidak ada filter maka return true
else {
if(employee.getName() != null) {
if(name.equals(employee.getName()))
return true; // jika ada filter dan curr employee name sama maka return true
// jika ada filter tapi curr employee name tdk sama maka continue
} // jika ada filter tapi curr employee name null maka continue
}
}
}
return false; // jika next employee = null maka return false
}
@Override
public Employee next() {
if(nextEmployee == null)
throw new NoSuchElementException();
else
return nextEmployee;
}
@Override
public void remove() {
// do nothing because we don't wanna remove anything
}
}
1 comments:
mau numpang nanya..
di java kan udah ada yang namanya java.util.iterator
jadi penerapan iterator pattern itu udah ga berguna dong ya?
kalo misal masih ada guna nya, dibagian mananya mas yang?
setau saya kalo iterator [attern itu kan kita membuat interface iterator baru bukan hanya tinggal memakai java.util.iterator..
tolong ditanggapi..terima kasih..
Post a Comment