در این قسمت تیم کدگیت را با آموزش Iterator پترن در جاوا همراهی کنید. ابتدا Iterator پترن را توضیح داده و سپس با پیاده سازی مثالی واقعی، این آموزش را پایان میبریم. پیش نیاز این آموزش، شامل موارد زیر است:
Behavioral Design Pattern
یکی از زیر شاخههای دیزاین پترن Behavioral Design Pattern میباشد. یکی از وظایف اصلی این دیزاین پترن، تعامل اشیا و جداسازی وظایف آنها با یکدیگر است. تعریف کامل Behavioral Design Pattern بدین صورت است که، تمامی اشیا با یکدیگر به راحتی بتوانند ارتباط برقرار کرده، بدون آنکه باعث وابستگی بین آنها شود.
Iterator پترن در جاوا
Iterator پترن یکی از معروفترین و پر استفادهترین پترنها است که در زبانهای جاوا و .net استفاده میشود. Iterator پترن یک روشی برای دسترسی مجموعه ای از اشیا هم جنس و پشت سر هم (مانند لیست پیوندی) است بدون آنکه درگیر جزییات (مانند نحوه اتصال اشیا به هم و ….) شویم.ما در آموزشهایی همچون لیست پیوندی در جاوا، BFS و DFS در جاوا از این پترن استفاده کردیم.

مثال Iterator پترن در جاوا
مثالی که میخواهیم پیاده سازی کنیم بسیار ساده میباشد. کلاسی داریم که مجموعهای از اسامی را در خود ذخیره میکند. در این کلاس یک Iterator پترن را پیاده سازی میکنیم به طوری که اسامی که در این کلاس وجود دارد برای ما به ترتیب برگرداند. برای این کار دو Interface به نام Iterator و Container را میسازیم. کلاس NameRepository، کلاسی است که اسامی ما را در خود ذخیره میکند. کلاس NameIterator یک Iterator برای کلاس NameRepository است. کد کلاسها و Interfaceهای توضیح داده شده به صورت زیر میباشد:
public interface Container {
public Iterator getIterator();
}
public interface Iterator {
public boolean hasNext();
public Object next();
}
public class NameRepository implements Container {
public String names[] = { "Robert", "John", "Julie", "Lora" };
@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator {
int index;
@Override
public boolean hasNext() {
if (index < names.length) {
return true;
}
return false;
}
@Override
public Object next() {
if (this.hasNext()) {
return names[index++];
}
return null;
}
}
}
کلاس NameIterator به صورت کلاس تودرتو نوشتهایم و همچنین این کلاس، Iterator را Implements کرده است. در آخر توجه داشته باشید Container متدی در خود دارد برای بازگردانی شی از جنس Iterator و در کلاس NameRepository از این Interface استفاده کردیم.
تست مثال Iterator پترن در جاوا
برای تست کدهای بالا، کد Main زیر را بزنید:
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for (Iterator iter = namesRepository.getIterator(); iter.hasNext();) {
String name = (String) iter.next();
System.out.println("Name : " + name);
}
}
}
خروجی کد بالا به صورت زیر میباشد:
Name : Robert
Name : John
Name : Julie
Name : Lora