النموذج Iterator

الوقت المقدر للقراءة 10 دقيقة.

وصف النموذج

هو نموذج سلوكي يستخدم لإيجاد طريقة للوصول إلى عناصر غرض من النمط Collection بطريقة تسلسلية دون الحاجة لمعرفة بنية هذا الغرض.

متى نستخدم النموذج Iterator

في اللغات الغرضية مثل جافا وسي شارب يتم تحقيق هذا النموذج في جميع ال Collections بشكل ضمني وليس عليك إعادة تحقيقه إلا إذا رغبت بعمل Collection خاص بك.

كيفية تطبيق النموذج Iterator

الخطوة الأولى بناء الواجهات بالشكل التالي:

package com.mutasem.iterator.implementation;

/**
 *
 * @author Mutasem
 */
public interface Iterator {

    public boolean hasNext();

    public Object next();
}
/**********************************************/

package com.mutasem.iterator.implementation;

/**
 *
 * @author Mutasem
 */
public interface Iterable {
    public Iterator getIterator();
}



الخطوة الثانية بناء ال Collection الخاص بي وليكن MyCollection ومن ثم تحقيق الواجهة Itratable في الصف MyCollection ولنتمكن من ذلك سنقوم ببناء صف داخلي يحقق الواجهة iterator وليكن MyIterator بالشكل التالي:

package com.mutasem.iterator.implementation;

/**
 *
 * @author Mutasem
 */
public class MyCollection implements Iterable {
    private String[] items;
    private int size, max;
    public MyCollection(int max) {
        items = new String[max];
    }
    public void add(String item) {
        if (size < max) {
            items[size] = item;
            size++;
        }
    }
    public int getSize() {
        return size;
    }
    private class MyIterator implements Iterator {
        int index;
        @Override
        public boolean hasNext() {
            if (index < size) {
                return true;
            }
            return false;
        }
        @Override
        public Object next() {
            if (this.hasNext()) {
                return items[index++];
            }
            return null;
        }
    }
    @Override
    public Iterator getIterator() {
        return new MyIterator();
    }
}

رابط السلسلة على GitHub

https://github.com/mutasemhajhasan/Design-Patterns

المراجع

Gamma, Erich ; Helm, Richard ; Johnson , Ralph ; Vlissides , John;. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Hawthorne, New York: Addison-Wesley.