وضع Iterator ، والمعروف أيضًا باسم وضع المؤشر. يتمثل التعريف المقدم من GOF في توفير طريقة للوصول إلى العناصر المختلفة في كائن حاوية دون تعريض التفاصيل الداخلية للكائن.
يتكون نمط Iterator من الأدوار التالية:
دور Iterator: دور Iterator مسؤول عن تحديد الواجهة للوصول إلى العناصر وتجاوزها.
دور التكرار الملموس: يحتاج دور التكرار المحدد إلى تنفيذ واجهة التكرار وتسجيل الموقع الحالي في اجتياز.
الحاوية: دور الحاوية مسؤول عن توفير واجهة لإنشاء دور محدد.
حاوية ملموسة: دور الحاوية المحدد ينفذ الواجهة لإنشاء دور محدد للتكرار. يرتبط دور التكرار المحدد هذا ببنية الحاوية.
مثال تنفيذ Java
مخطط الفصل:
شفرة:
/ ** * واجهة مجموعة مخصصة ، على غرار java.util.collection * لتخزين البيانات * Author Stone * */ public interface iCollection <T> {iiterator <T> iterator () ؛ // إرجاع الفراغ المتكرر (t t) ؛ T الحصول على (int index) ؛ } / ** * تشبه واجهة Iterator المخصصة Java.Util.iterator * البيانات المستخدمة لاجتياز فئة التجميع ICollection * Author Stone * */ Public Interface Iiterator <T> {Boolean hasnext () ؛ Boolean hasprevious () ؛ ر التالي () ؛ ر سابق () ؛ } / ** * Collection Class ، تعتمد على myiterator * Author Stone */ public class myCollection <T> تنفذ iCollection <T> {private t [] arys ؛ INT INDER = -1 ؛ سعة int الخاصة = 5 ؛ public myCollection () {this.arys = (t []) كائن جديد [السعة] ؛ } Override public iiterator <T> iterator () {return new myiterator <T> (this) ؛ } Override public void add (t t) {index ++ ؛ if (index == السعة) {السعة *= 2 ؛ this.arys = arrays.copyof (arys ، القدرة) ؛ } this.arys [index] = t ؛ } Override public t get (int index) {return this.arys [index] ؛ }} /** إذا كان هناك بنية تخزين جديدة ، فيمكنك iCollection جديدة ، المقابلة لـ Iiterator الجديدة لتنفيذ Traversal*/ SuppressWarnings ({"RawTypes" ، "Unchecked") اختبار الطبقة العامة () إضافة (مجموعة ، 3 ، 5 ، 8 ، 12 ، 3 ، 3 ، 5) ؛ لـ (iiterator <integer> iterator = collection.iterator () ؛ iterator.hasnext () ؛) {system.out.println (iterator.next ()) ؛ } system.out.println ("-----------------------") ؛ icollection collection2 = new myCollection () ؛ إضافة (collection2 ، "a" ، "b" ، "c" ، 3 ، 8 ، 12 ، 3 ، 5) ؛ لـ (iiterator iterator = collection2.iterator () ؛ iterator.hasNext () ؛) {system.out.println (iterator.next ()) ؛ }} static <T> void add (icollection <t> c ، t ... a) {for (t i: a) {c.add (i) ؛ }}}}مطبعة:
3 5 8 12 3 3 5 ---------------- ABC 3 8 12 3 5