**نمط المكرّر** **iterator pattern** هو أحد الأنماط السلوكية في أنماط تصميم البرمجيات، يُستخدم فيه مكرر والذي بدوره يُستخدم للنفاذ (traverse) إلى الحاويات البرمجية والوصول إلى عناصر الحاوية. يفصل نمط التكرار الخوارزميات عن الحاويات؛ في بعض الحالات، تكون الخوارزميات ضرورية للحاويات وبالتالي لا يمكن فصلها.

على سبيل المثال، يمكن تنفيذ الخوارزمية الافتراضية البحث عن عنصر *SearchForElement* بشكل عام باستخدام نوع محدد من المكرّر بدلاً من تنفيذه كخوارزمية خاصة بالحاويات. يسمح هذا باستخدام *SearchForElement* على أي حاوية تدعم نوع المكرر المطلوب.

تعريف
-----

جوهر نمط المكرر هو «توفير طريقة للوصول إلى عناصر كائن مركّب بالتسلسل دون الكشف عن تمثيله الأساسي.».

هيكل
----

### مخطط الصنف UML ومخطط التتابع

 نموذج لصنف 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

 نمط المكرر

أمثلة للتنفيذات في لغات البرمجة
-------------------------------

### جافا

تحتوي Java على واجهة `Iterator` .

مثال بسيط يوضح كيفية إرجاع الأعداد الصحيحة بين البداية والنهاية [start، end] باستخدام المكرر `Iterator` 

```
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، يمكن النفاذ إلى الكائنات التي تقوم بتنفيذ واجهة (يمكن تكريره) `Iterable` ، والتي تُرجع (المكرر) `Iterator` من طريقت</>ها الوحيدة، باستخدام البناء النحوي للحلقة foreach في جافا. تمتد واجهة (التجميعات) `Collection` من جافا Java collections framework</>إلى `Iterable` .

مثال على تنفيذ صنف `Family` للواجهة `Iterable` :

```
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();
 }
}

```
 يوضح الصنف («مثال-يمكن-تكريره») `IterableExample` استخدام الصنف «عائلة» `Family` : 

```
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

```

انظر أيضًا
----------

* نمط مركب
* الحاوية (هيكل البيانات)
* نمط التصميم (علوم الحاسب)
* المكرر
* نمط المراقب

المراجع
-------

1. ↑  Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (31 Oct 1994). *Design Patterns: Elements of Reusable Object-Oriented Software* (بالإنجليزية). Pearson Education. ISBN:978-0-321-70069-8. Archived from the original on 2020-06-28.
2. ↑  خطط التصميم
3. ↑  "The Iterator design pattern - Structure and Collaboration". *w3sDesign.com*. مؤرشف من الأصل في 2020-06-28. اطلع عليه بتاريخ 2017-08-12.

روابط خارجية
------------

* تكرار الكائن في PHP
* نمط المكرر في C #
* نمط المكرر في UML و LePUS3 (لغة النمذجة الرسمية)
* البرنامج التعليمي SourceMaking
* أمثلة على تنفيذ نماذج تصميم البرنامج التعليمي
* نمط المكرر

* أيقونة بوابةبوابة برمجة الحاسوب
* أيقونة بوابةبوابة علم الحاسوب

| * ع
* ن
* ت
 أنماط تصميم البرمجيات (برمجة) |
| --- |
| إنشائي (Creational) | 
* Abstract factory
* نمط تصميم الباني
* حقن التبعية
* نمط طريقة المصنع
* Lazy initialization
* Multiton
* Object pool
* Prototype
* اكتساب الموارد تهيئة
* النمط المفرد

 |
| هيكلي (Structural) | 
* نمط المحول
* نموذج التصميم جسر
* نموذج التصميم المجمع
* نموذج التصميم ديكور
* Delegation
* نمط واجهة المبنى
* نموذج التصميم وزن الذبابة
* Front controller
* Marker interface
* Module
* نمط الوكيل
* Twin

 |
| سلوكي (Behavioral) | 
* Blackboard
* Chain of responsibility
* Command
* Interpreter
* نمط المكرر
* Mediator
* Memento
* Null object
* المراقب (نموذج تصميم)
* Servant
* Specification
* State
* نموذج الإستراتيجية
* Template method
* Visitor

 |
| وظيفي (Functional) | 
* مونويد
* Functor
* Applicative
* Monad
* Comonad
* Free monad
* HOF
* Currying
* Function composition
* Closure
* المولد

 |
| متزامن (Concurrency) | 
* Active object
* Actor
* Balking
* حاجز (حوسبة)
* Binding properties
* Coroutine
* Compute kernel
* Double-checked locking
* Event-based asynchronous
* ليف
* Futex
* Futures and promises
* Guarded suspension
* Immutable object
* Join
* Lock
* صيغة التراسل
* Monitor
* Nuclear
* Proactor
* Reactor
* Read write lock
* Scheduler
* STM
* Thread pool
* Thread-local storage

 |
| معماري (Architectural) | 
* \* ADR
* نمط التسجيل النشط
* نمط الوسيط
* نموذج الخادم والعميل
* هندسة البرمجيات بالمكونات
* DAO
* كائن نقل البيانات
* تصميم موجه بالمجال
* ECB
* ECS
* EDA
* Front controller
* Identity map
* Interceptor
* Implicit invocation
* عكس التحكم
* Model 2
* MOM
* Microservices
* MVA
* نمط وعرض ومتحكم
* MVP
* MVVM
* Monolithic
* عمارة متعددة الطبقات
* Naked objects
* ORB
* ند لند
* Publish–subscribe
* PAC
* رست
* بنية خدمية
* نمط محدد موقع الخدمة
* SN
* SBA
* Specification

 |
| توزيع سحابي (Cloud Distributed) | 
* Ambassador
* Anti-Corruption Layer
* Bulkhead
* Cache-Aside
* Circuit Breaker
* CQRS
* Compensating Transaction
* Competing Consumers
* Compute Resource Consolidation
* Event Sourcing
* External Configuration Store
* Federated Identity
* Gatekeeper
* فهرس قاعدة بيانات
* Leader Election
* نموذج الهيكلة والتجميع
* Materialized View
* Pipes
* Filters
* Priority Queue
* Publisher-Subscriber
* Queue-Based Load Leveling
* Retry
* Scheduler Agent Supervisor
* Sharding
* Sidecar
* Strangler
* Throttling
* Valet Key

 |
| أخرى | 
* Business delegate
* Composite entity
* Intercepting filter
* Lazy loading
* Mangler
* غرض مقلد
* Type tunnel
* Method chaining

 |
| كتب | 
* *خطط التصميم*
* *Enterprise Integration Patterns*
* *Code Complete*
* *POSA*

 |
| أشخاص | 
* كريستوفر الكسندر
* إريك جاما
* رالف جونسن
* John Vlissides
* Grady Booch
* كينت بيك
* وورد كانينغهام
* مارتن فاولر
* روبرت سيسيل مارتن
* Jim Coplien
* دوغلاس س. شميت
* Linda Rising

 |
| مجتمعات (Communities) | 
* The Hillside Group
* The Portland Pattern Repository

 |