23 أنماط التصميم ، الفصل 14: نمط جافا إيتراتور
التعريف: يوفر طريقة للوصول إلى عناصر مختلفة في كائن حاوية دون تعريض التفاصيل الداخلية للكائن.
النوع: نمط سلوكي
مخطط الفصل:
إذا كنت تريد أن تسأل الوضع الأكثر استخدامًا في Java ، فإن الإجابة ليست هي وضع Singleton ، ولا وضع المصنع ، ولا وضع الإستراتيجية ، ولكن وضع Iterator. دعونا نلقي نظرة على قطعة من الكود أولاً:
print print print static print (collection coll) {iterator it = coll.iterator () ؛ بينما (it.hasnext ()) {String str = (string) it.next () ؛ system.out.println (str) ؛ }}تتمثل وظيفة هذه الطريقة في طباعة حلقة مجموعة السلسلة ، ويتم استخدام نمط ITERATOR في نمط ITERATOR. قامت لغة Java بتنفيذ نمط Iterator بالكامل. المترجم إلى الصينية يعني التكرار. عندما يتعلق الأمر بالتكرار ، أولاً وقبل كل شيء ، يرتبط بمجموعات. تسمى المجموعات أيضًا المجاميع ، والحاويات ، وما إلى ذلك. يمكننا أن نعتبر مجموعات الحاويات التي يمكن أن تحتوي على كائنات. على سبيل المثال ، يمكن تسمية قائمة ، تعيين ، خريطة ، وحتى صفائف. وظيفة التكرار هي اجتياز الكائنات في الحاوية واحدة تلو الأخرى.
هيكل نمط التكرار
حاوية مجردة: بشكل عام ، يتم توفير طريقة ITerator () ، مثل واجهة التجميع ، واجهة القائمة ، واجهة تعيين ، إلخ. في Java.
حاوية محددة: إنها فئة التنفيذ الملموسة للحاويات التجريدية ، مثل القائمة المطلوبة لواجهة القائمة لتنفيذ ArrayList ، القائمة المرتبطة بواجهة القائمة لتطبيق LinkList ، قائمة التجزئة بواجهة SET لتطبيق Hashset ، وما إلى ذلك.
التكرار التجريدي: تحديد الطريقة المطلوبة لاجتياز العناصر. بشكل عام ، هناك ثلاث طرق: احصل على الطريقة الأولى () للعنصر الأول ، احصل على الطريقة التالية () للعنصر التالي ، حدد ما إذا كانت طريقة اجتياز تنتهي ISDONE (أو hasnext ()) ، إزالة () من الكائن الحالي ،
تنفيذ ITERATOR: ينفذ الطرق المحددة في واجهة ITERATAR لإكمال تكرار المجموعة.
تنفيذ الكود
واجهة iterator {الكائن العام next () ؛ boolean public hasnext () ؛ } Class ConcreteIterator تنفذ ITerator {List Private List = New ArrayList () ؛ Private Int Lucsor = 0 ؛ concreteiterator العامة (قائمة قائمة) {this.list = list ؛ } public boolean hasnext () {if (cursor == list.size ()) {return false ؛ } إعادة صواب ؛ } الكائن العام next () {Object obj = null ؛ if (this.hasnext ()) {obj = this.list.get (cursor ++) ؛ } إرجاع OBJ ؛ }} واجهة Aggregate {public void add (Object OBJ) ؛ إزالة الفراغ العام (كائن OBJ) ؛ iterator iTerator العامة () ؛ } class concreteAggRegate تنفذ Aggregate {private list = new ArrayList () ؛ void public add (Object obj) {list.add (obj) ؛ } iTerator iTerator () {return new ConcreteIterator (list) ؛ } public void remove (object obj) {list.remove (obj) ؛ }} client client {public static void main (string [] args) {aggregate ag = new ConcreteAggRegate () ؛ Ag.Add ("Xiaoming") ؛ Ag.Add ("Xiaohong") ؛ Ag.Add ("Xiaogang") ؛ iterator it = ag.iterator () ؛ بينما (it.hasnext ()) {String str = (string) it.next () ؛ system.out.println (str) ؛ }}} في الكود أعلاه ، الإجمالي هو واجهة فئة الحاوية. يمكنك تخيل المجموعة ، القائمة ، تعيين ، إلخ. التجميع هو نسختهم المبسطة. هناك ثلاث طرق رئيسية في واجهة فئة الحاوية: إضافة طريقة الكائن إضافة ، حذف طريقة الكائن إزالة ، والحصول على iTerator طريقة التكرار. ITERATAR هي واجهة ITERATOR ، والتي لها طريقتان رئيسيتان: الحصول على طريقة الكائن التكراري بعد ذلك ، وتحديد ما إذا كان لتكرار الطريقة يمكنك مقارنة الواجهتين لـ java.util.list و java.util.iterator للتفكير في الأمر بنفسك.
مزايا وضع التكرار:
لقد تم تبسيط طريقة اجتياز ، ولا تزال مزعجة للغاية لاجتياز جمع الكائنات. بالنسبة للمصفوفات أو القوائم المطلوبة ، لا يزال بإمكاننا الحصول عليها من خلال المؤشرات ، ولكن يحتاج المستخدمون إلى اجتياز الكائنات بأنفسهم على أساس أن لديهم فهمًا واضحًا للمجموعة. ومع ذلك ، بالنسبة لجدول التجزئة ، من المثير للقلق اجتياز المستخدم. بعد تقديم طريقة التكرار ، من الأسهل بكثير استخدام المستخدمين.
هناك العديد من الطرق لاجتيازها ، مثل القوائم المطلوبة ، يمكننا تزويد اثنين من التكرار بترتيب إيجابي وتجاوز العكس وفقًا للاحتياجات. يحتاج المستخدمون فقط إلى الحصول على التكرار الذي قمنا بتنفيذه لاجتياز المجموعة بسهولة.
التغليف جيد ، ويحتاج المستخدمون فقط إلى الحصول على جهاز تكرار لاجتيازه ، لكن لا داعي للقلق بشأن خوارزميات التجوال.
عيوب نمط Iterator:
بالنسبة للتمريرات البسيطة (مثل المصفوفات أو القوائم المطلوبة) ، من المهم استخدام التكرار ، وقد يشعر الجميع أنه ، مثل ArrayList ، نفضل استخدام الحلقات والحصول على طرق لاجتياز المجموعة.
السيناريوهات المعمول بها لوضع التكرار
نمط التكرار التكافلي والموت مع المجموعة. بشكل عام ، طالما قمنا بتنفيذ مجموعة ، نحتاج إلى توفير التكرار للمجموعة في نفس الوقت ، تمامًا مثل المجموعة ، القائمة ، التعيين ، الخريطة ، إلخ. في Java ، تحتوي هذه المجموعات على تكراراتها الخاصة. إذا كنا نريد تنفيذ هذه الحاوية الجديدة ، بالطبع ، نحتاج أيضًا إلى تقديم نمط Iterator لتنفيذ جهاز التكرار لحاويةنا.
ومع ذلك ، نظرًا لأن العلاقة بين الحاويات والمتكررات قريبة جدًا ، فإن معظم اللغات توفر المتكررين عند تنفيذ الحاويات ، ويمكن للحاويات والمؤكرات التي توفرها هذه اللغات تلبية احتياجاتنا في معظم الحالات. لذلك ، من النادر نسبيًا ممارسة نمط التكرار بأنفسنا. نحتاج فقط إلى استخدام الحاويات والمتكررات الموجودة في اللغة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.