الگوی طراحی iterator در جاوا اسکریپت

الگوی طراحی iterator در جاوا اسکریپت نوشته شده در   javascript ۲۱ دی , ۱۳۹۷ توسط  عباس حسینی

مجموعه داده (data collection) یکی از پرکاربردترین بخش های برنامه نویسی است لزا به روشی مناسب برای دستیابی به عناصر آنها نیاز داریم که  الگوی طراحی iterator این مشکل را برای ما حل میکند

از نمونه collection ها میتوان درخت، گراف و پشته را مثال زد، مثلا فرض کنید که قصد داریم همه عناصر یک درخت را مانند شکل زیر به صورت ترتیبی پیمایش کنیم آنگاه میتوان از این الگو استفاده نمود

پیمایش درخت

تعریف الگوی طراحی iterator در جاوا اسکریپت

الگوی طراحی Iterator یکی از ساده ترین الگوی های GOF میباشد که به وسیله آن میتوانیم به همه عناصر یک مجموعه یا کالکشن دسترسی پیدا کنیم به عبارتی دیگر این الگو روشی برای پیمایش ترتیبی بین اعضای یک مجموعه به ما ارائه میدهد
الگوی طراحی iterator

نحوه پیاده سازی الگوی طراحی iterator در جاو اسکریپت

برای پیاده یازی این الگوی ساده ابتدا یک کلاس به نام Iterator تشکیل میدهیم که ورودی آن یک آرایه است که دارای دو متد next برای رفتن به عنصر بعدی و hasNext برای موجود بودن عنصر بعدی و نهایتا یک متد مهم به نام each برای پیمایش همه عناصر کالکشن میباشد


class Iterator {
    constructor(items) {
        this.index = 0;
        this.items = items;
    }

    next() {
        return this.items[this.index++];
    }

    hasNext() {
        return this.index < this.items.length;
    }
  
    each (fn) {
      while( ITERATOR.hasNext() ) {
        fn( ITERATOR.next() )
      }
    }
}

برای استفاده از این الگو یک شی از کلاس Iterator ساخته و یک آرایه را مورد پیمایش قرار می دهیم که نتیجه اجرای آن را در ادامه میتوانید مشاهده کنید


var collection = ['abbas','mohammad','ali','amin']
var ITERATOR = new Iterator(collection);

ITERATOR.each(function(item){
   document.write( item + '
' )
})
 

See the Pen Javascript Iterator Pattern by abbas hosseini (@abizebel) on CodePen.

موارد استفاده از الگوی iterator در جاوا اسکریپت


زمانی از این الگو استفاده میکنیم که نیاز داشته باشیم یک مجموعه داده را به طور ترتیبی مورد پیمایش قرار بدهیم حال این مجموعه داده ممکن است از انواع شناخته شده مثل درخت و لیست باشد یا اینکه یک ساختار مختص به پروژه ما را داشته باشد

لیست الگوهای طراحی GOF در جاو اسکریپت

 

Creational Patterns

 

Structural Patterns

 

Behavioral Patterns