نمط المكرر
المحتويات
في البداية، نمط المكرّر iterator pattern هو أحد الأنماط السلوكية في أنماط تصميم البرمجيات، يُستعمل فيه مكرر والذي بدوره يُستعمل للنفاذ (traverse) إلى الحاويات البرمجية والوصول إلى عناصر الحاوية. يفصل نمط التكرار الخوارزميات عن الحاويات؛ في بعض الحالات، تكون الخوارزميات ضرورية للحاويات وبالتالي لا يمكن فصلها. وفيما يلي تفاصيل أوسع عن ذلك.
في هذا الإطار، مثلًا، يمكن تنفيذ الخوارزمية الافتراضية البحث عن عنصر SearchForElement بشكل عام باستخدام نوع محدد من المكرّر بدلاً من تنفيذه كخوارزمية خاصة بالحاويات. يسمح هذا باستخدام SearchForElement على أي حاوية تدعم نوع المكرر المطلوب.
مخطط الصنف UML ومخطط التتابع
وفي هذا السياق، في مخطط الصنف UML أعلاه، صنف Client يشير (1) إلى واجهة (التراكيب) Aggregate لإنشاء كائن Iterator (createIterator) و (2) إلى واجهة Iterator للنقاذ في كائن Aggregate (next,hasNext). وصنفIterator1 ينفذ واجهة Iterator عن طريق الوصول إلى الصف Aggregate1 .
أمثلة للتنفيذات في لغات البرمجة
وفي هذا السياق، يُظهر مخطط الصنف UML تفاعلات وقت التشغيل: يستدعي كائن Client الطريقة «إنشاء-مكرر» createIterator على كائن «تراكيب-1» Aggregate1 ، الذي ينشئ كائن Iterator1 ويعيده إلى Client. يستعمل Client ثم Iterator1 للنفاذ إلى عناصر كائن Aggregate1 .
مخطط الصنف UML
}
var weasleys = Set.of(
public static void main(String[] args) {
من جانب آخر، } يوضح الصنف («مثال-يمكن-تكريره») IterableExample استخدام الصنف «عائلة» Family : public class IterableExample {
نمط مركب
- الحاوية (هيكل البيانات)
- نمط التصميم (علوم الحاسب)
- المكرر
- نمط المراقب
- المراجع
- روابط خارجية
- تكرار الكائن في PHP
public class RangeIteratorExample {
- public static Iterator 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);
جافا
إضافةً إلى ذلك، مثال بسيط يوضح كيفية إرجاع الأعداد الصحيحة بين البداية والنهاية [start، end] باستخدام المكرر Iterator import java.util.Iterator;
تحتوي Java على واجهة .
import java.util.NoSuchElementException;
نمط المكرر في C #
- نمط المكرر في UML و LePUS3 (لغة النمذجة الرسمية)
- البرنامج التعليمي SourceMaking
- أمثلة على تنفيذ نماذج تصميم البرنامج التعليمي
}
كذلك، } بدءأ من Java 5، يمكن النفاذ إلى الكائنات التي تقوم بتنفيذ واجهة (يمكن تكريره) ، والتي تُرجع (المكرر) Iterator من طريقت</>ها الوحيدة، باستخدام البناء النحوي للحلقة foreach في جافا. تمتد واجهة (التجميعات) من جافا Java collections framework</>إلى Iterable .
- مثال على تنفيذ صنف Family للواجهة Iterable :import java.util.Iterator;
- import java.util.Set;
- class Family implements Iterable {
- private final Set elements;
- public Family(Set elements) {
- this.elements = Set.copyOf(elements);
- }
- @Override
- public Iterator iterator {
- return elements.iterator;
"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
- انظر كذلك
تعريف
علاوةً على ذلك، جوهر نمط المكرر هو «توفير طريقة للوصول إلى عناصر كائن مركّب بالتسلسل دون الكشف عن تمثيله الأساسي.».
هيكل
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟