نمط المكررنمط المكرّر iterator pattern هو أحد الأنماط السلوكية[1] في أنماط تصميم البرمجيات، يُستخدم فيه مكرر والذي بدوره يُستخدم للنفاذ (traverse) إلى الحاويات البرمجية والوصول إلى عناصر الحاوية. يفصل نمط التكرار الخوارزميات عن الحاويات؛ في بعض الحالات، تكون الخوارزميات ضرورية للحاويات وبالتالي لا يمكن فصلها. على سبيل المثال، يمكن تنفيذ الخوارزمية الافتراضية البحث عن عنصر SearchForElement بشكل عام باستخدام نوع محدد من المكرّر بدلاً من تنفيذه كخوارزمية خاصة بالحاويات. يسمح هذا باستخدام SearchForElement على أي حاوية تدعم نوع المكرر المطلوب. تعريفجوهر نمط المكرر هو «توفير طريقة للوصول إلى عناصر كائن مركّب بالتسلسل دون الكشف عن تمثيله الأساسي.».[2] هيكلمخطط الصنف UML ومخطط التتابعفي مخطط الصنف UML أعلاه، صنف يُظهر مخطط الصنف UML تفاعلات وقت التشغيل: يستدعي كائن مخطط الصنف UMLأمثلة للتنفيذات في لغات البرمجةجافاتحتوي Java على واجهة
مثال بسيط يوضح كيفية إرجاع الأعداد الصحيحة بين البداية والنهاية [start، end] باستخدام المكرر import java.util.Iterator;
import java.util.NoSuchElementException;
public class RangeIteratorExample {
public static Iterator<Integer> range(int start, int end) {
return new Iterator<>() {
private int index = start;
@Override
public boolean hasNext() {
return index < end;
}
@Override
public Integer next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return index++;
}
};
}
public static void main(String[] args) {
var iterator = range(0, 10);
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// or using a lambda
iterator.forEachRemaining(System.out::println);
}
}
بدءأ من Java 5، يمكن النفاذ إلى الكائنات التي تقوم بتنفيذ واجهة (يمكن تكريره) import java.util.Iterator;
import java.util.Set;
class Family<E> implements Iterable<E> {
private final Set<E> elements;
public Family(Set<E> elements) {
this.elements = Set.copyOf(elements);
}
@Override
public Iterator<E> iterator() {
return elements.iterator();
}
}
يوضح الصنف («مثال-يمكن-تكريره») public class IterableExample {
public static void main(String[] args) {
var weasleys = Set.of(
"Arthur", "Molly", "Bill", "Charlie",
"Percy", "Fred", "George", "Ron", "Ginny"
);
var family = new Family<>(weasleys);
for (var name : family) {
System.out.println(name + " Weasley");
}
}
}
مخرجات: Ron Weasley
Molly Weasley
Percy Weasley
Fred Weasley
Charlie Weasley
George Weasley
Arthur Weasley
Ginny Weasley
Bill Weasley
انظر أيضًا
المراجع
روابط خارجية |