Iterator tasarım deseni behavioral(davranışsal) tasarım kalıbı grubundadır.
Karmaşık veri tiplerinde gezinmeyi kolaylaştırır.
Tekrar tekrar aynı elemanlarla karşılaşmadan farklı veri tipleri de olsa bütün elemanların üzerinde gezinebiliriz.
Amaç, yapısı bilinmeyen bir listenin elemanlarına sıralı olarak erişmektir.
Client: Bu yapıyı kullanarak koleksiyon içindeki elemanlara erişen yapıdır.
Iterator: Koleksiyon elemanları elde edilebilmesi için gerekli işlemleri tanımlar.
Aggregate: Koleksiyon barındıran nesnelerin Iterator tipinden nesne oluşturacağını belirtir.
Concrete Aggregate: Koleksiyon barındıran nesnedir. Aggregate arayüzünü uygular ve ConcreteIterator nesnesini oluşturur.
ConcreteIterator: Aggregate yapısındaki koleksiyon elemanlarının elde edilmesini sağlayan metotları barındıran gerçek iterator nesnesidir.
Örneğin bir şirkette farklı departmanlarda çalışanlarımız olsun. Yazılım departmanında çalışanlar dizi içerisinde barınıyor, donanım departmanında çalışanlar bir liste içerisinde barınıyor. Iterator sayesinde bu çalışanların bilgilerini aynı şekilde listelettirebiliriz.
Bu amaçla Iterator interface'ini implement eden ArrayIterator ve ListIterator sınıfları yazılmıştır.
Örnek java kodu:
Ad ve soyad bilgileri içeren Calisanlar.java
public class Calisanlar {
private String Ad;
private String Soyad;
public Calisanlar(String Ad, String Soyad){
this.Ad=Ad;
this.Soyad=Soyad;
}
@Override
public String toString()
{
return Ad + " " + Soyad;
}
}
Iterable ve Iterator interfacelerimiz.
public interface Iterable {
Iterator getIterator();
}
public interface Iterator {
Object getItem();
boolean next();
}
Iterator interface'ini implement eden ArrayIterator ve ListIterator sınıflarımız.
public class ArrayIterator implements Iterator {
private YazilimDepartmani yazilimDepartmani = new YazilimDepartmani();
private int index=0;
public Object getItem()
{
Calisanlar calisan = yazilimDepartmani.GetCalisanlar()[index];
index++;
return calisan;
}
public boolean next()
{
if(index<yazilimDepartmani.GetCalisanlar().length)
{
return true;
}
else
{
return false;
}
}
}
public class ListIterator implements Iterator{
private DonanimDepartmani donanimDepartmani= new DonanimDepartmani();
private int index=0;
public Object getItem()
{
Calisanlar calisan =donanimDepartmani.GetCalisanlar().get(index);
index++;
return calisan;
}
public boolean next()
{
if(index<donanimDepartmani.GetCalisanlar().size())
{
return true;
}
else
{
return false;
}
}
}
YazilimDepartmani.java
public class YazilimDepartmani implements Iterable{
private Calisanlar[] calisanlar;
public YazilimDepartmani()
{
calisanlar= new Calisanlar[3];
calisanlar[0]=new Calisanlar("Yaren", "Ulusoy");
calisanlar[1]=new Calisanlar("Esra","Dinç");
calisanlar[2]=new Calisanlar("Sibel","Ak");
}
public Calisanlar[] GetCalisanlar()
{
return calisanlar;
}
public ArrayIterator getIterator()
{
return new ArrayIterator();
}
}
DonanimDepartmani.java
public class DonanimDepartmani implements Iterable {
private ArrayList<Calisanlar> calisanlar;
public DonanimDepartmani()
{
calisanlar=new ArrayList<Calisanlar>();
calisanlar.add(new Calisanlar("Ecrin","Ulu"));
calisanlar.add(new Calisanlar("Seda","Yılmaz"));
}
public ArrayList<Calisanlar> GetCalisanlar()
{
return calisanlar;
}
public ListIterator getIterator()
{
return new ListIterator();
}
}
Ana class:
public class Test{
public static void main(String[] args) {
YazilimDepartmani yazilimDepartmani = new YazilimDepartmani();
Iterator iterator = yazilimDepartmani.getIterator();
while(iterator.next())
{
System.out.println(iterator.getItem().toString());
}
DonanimDepartmani donanimDepartmani = new DonanimDepartmani();
iterator=donanimDepartmani.getIterator();
while(iterator.next())
{
System.out.println(iterator.getItem().toString());
}
}
}
Program çıktısı:
0 Yorum