بخش های اصلی

آموزش الگوهای طراحی

Design Pattern - الگوی Iterator

الگوی Iterator، در طراحی الگوها در محیط برنامه نویسی جاوا و .Net خیلی به کار رفته. این الگو برای به دست آوردن راهی برای دسترسی به عناصر مجموعه ای از اشیا، به روشی متوالی و بدون نیاز به دانستن چیزی راجع به زیرلایه های نمایش آن ها، استفاد میشه.

الگوی Iterator، زیرگروهِ الگوی رفتاری (behavioral) محسوب میشه.

پیاده سازی

در این بخش رابطی به نام Iterator که متد هدایت را شرح میده و رابط Container که iterator را برمی گردانه، ایجاد می کنیم. کلاس های Concrete، که رابطِ Container را پیاده سازی می کنن، در برابر پیاده سازی رابطِ Iterator مسئول اند و از آن استفاده می کنن.

IteratorPatternDemo، در نسخه ی آزمایشیِ کلاس مان از NamesRepository استفاده می کنه و یک کلاس concrete برای پیاده سازی چاپ نام های ذخیره شده که بصورتِ مجموعه ای در NamesRepository هستن، به کار میره.

iterator pattern uml diagram

مرحله ی 1

ایجاد رابط.

Iterator.java

public interface Iterator {
   public boolean hasNext();
   public Object next();
}

Container.java

public interface Container {
   public Iterator getIterator();
}

مرحله ی 2

ایجاد کلاس های concrete که رابطِ Container را پیاده سازی می کنن. این کلاس یک کلاس داخلی به نام NameIterator داره که رابطِ Iterator را پیاده سازی می کنه.

NameRepository.java

public class NameRepository implements Container {
   public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};

   @Override
   public Iterator getIterator() {
      return new NameIterator();
   }

   private class NameIterator implements Iterator {

      int index;

      @Override
      public boolean hasNext() {
      
         if(index < names.length){
            return true;
         }
         return false;
      }

      @Override
      public Object next() {
      
         if(this.hasNext()){
            return names[index++];
         }
         return null;
      }		
   }
}

مرحله ی 3

از NameRepository برای گرفتن iterator و چاپ نام ها استفاده می شه.

IteratorPatternDemo.java

public class IteratorPatternDemo {
	
   public static void main(String[] args) {
      NameRepository namesRepository = new NameRepository();

      for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
         String name = (String)iter.next();
         System.out.println("Name : " + name);
      } 	
   }
}

مرحله ی 4

بررسی خروجی

Name : Robert
Name : John
Name : Julie
Name : Lora
در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد