Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me

Design Pattern - Iterator



  April 21, 2019    Labels:,,,,,,,, 

Iterator design pattern'ı nesnelerin içerdikleri koleksiyon (array, list, map, set...) yapılarının türlerinden bağımsız olarak bu koleksiyon yapıları üzerinde işlem yapmamızı sağlar. Örneğin bir şirketin departmanlarına ait nesnelerde o departmanlarda çalışan kişilerin nesneleri tutuluyor olsun. Her departman bu nesneleri farklı koleksiyon yapıları ile tutabilir. Bu pattern ile departmanların uyguladıkları koleksiyon yapılarından bağımsız departmanlarda çalışan kişilere aynı yöntem ile erişebiliriz.
Java dili içerisinde bu pattern uygulanmış bir şekilde bulunur. iterator ve iterable interface'leri bu pattern için yazılmıştır. Ayrıca bu pattern'ın uygulandığı özel for döngüsü de Java dilinde mevcuttur.

Uygulama
  • Bir iterator interface'i yaratılır. Bu interface koleksiyon yapısı üzerinde gezinmek için next ve back metotlarını içermelidir. Ayrıca koleksiyon üzerindeki nesnelere erişmek için bir getItem metodu içermelidir.
  • Uygulayacağımız her koleksiyon yapısı için bir iterator sınıfı yazmalıyız ve iterator interface'ini bu sınıfa implement etmeliyiz. Bu implement ile gelen metotları koleksiyona özel şekilde doldurmalıyız.
  • Bir iterable interface'i yazarak iterator pattern'ını kullanacak olan sınıflara bir arayüz sağlamalıyız. Bu interface'in içine getIterator metodu yazarak bu interface'i uygulayan sınıfların koleksiyonları için uygun iterator sınıfını dönmelerini sağlamalıyız.


public interface Iterable {
     public Iterator getIterator();
}

public interface Iterator {
    public Object getItem();
    public boolean next();
    public boolean back();
}

public IKDepartman implements Iterable {
    private Calisan[] calisanlar;
    public ArrayIterator getIterator () {
        return new ArrayIterator(calisanlar);
    }
}

public class Test {
    public static void main () {
        IKDepartman ikDepartman = new IKDepartman();
        Iterator iterator = ikDepartman.getIterator();
        while(iterator.next) {
            System.out.println(iterator.getItem().toString);
        }
    }
}

public class ArrayIterator implements Iterator {
    private Object[] array;
    private int index = 0;
    public ArrayIterator (Object[] array) {
        this.array = array;
    }
    public Object getItem() {
        return array[index];
    }
    public boolean next () {
        if(index < array.length) {
            return true;
        }
        return false;
    }
    public boolean back () {
        if(index - 1 >= 0 && index - 1 < array.length) {
            return true;
        }
        return false;
    }
}

No comments:

Post a Comment