Iterator Pattern

Behavioral Design Patterns - জাভায় ডিজাইন প্যাটার্ন (Design Patterns in Java) - Java Technologies

239

Iterator Pattern হল একটি Behavioral Design Pattern, যা একটি নির্দিষ্ট ডেটা স্ট্রাকচারে থাকা উপাদানগুলির ওপর পুনরাবৃত্তি করার জন্য একটি একক ইন্টারফেস প্রদান করে। এই প্যাটার্নটি বিভিন্ন ধরনের ডেটা স্ট্রাকচারের মধ্যে কমন ইন্টারফেসের মাধ্যমে উপাদান অ্যাক্সেসের সুবিধা দেয়। এতে, একটি ডেটা স্ট্রাকচারের মধ্যে উপাদান ভ্রমণ করার জন্য বাইরের ক্লাস বা কোডের কোনও কিছু পরিবর্তন না করে পুনরাবৃত্তি করার পদ্ধতি প্রদান করা হয়।

Iterator Pattern এর উদ্দেশ্য:

  1. Encapsulation: Iterator Pattern ডেটা স্ট্রাকচার এবং তার ইন্টারফেসের ভিতরের বাস্তবায়নকে অ্যাক্সেসের বাইরে আবদ্ধ করে রাখে। এর মাধ্যমে, ক্লাসের মধ্যে ডেটা উপাদান পরিচালনার জন্য অন্য কোন কোড সরাসরি ডেটা স্ট্রাকচারের মধ্যে প্রবেশ করে না।
  2. Separation of Concerns: ডেটা স্ট্রাকচারের ইমপ্লিমেন্টেশন এবং উপাদান পুনরাবৃত্তি করার লজিককে পৃথক করে।
  3. Simplification: আপনি যে ডেটা স্ট্রাকচারের ওপর কাজ করছেন সেটির ভেতরের কাঠামো সম্পর্কে জানার প্রয়োজন ছাড়াই উপাদানগুলোতে ভ্রমণ করতে পারেন।

Iterator Pattern এর মৌলিক উপাদান:

  1. Iterator Interface: এটি একটি ইন্টারফেস যা hasNext() এবং next() মেথড ডিফাইন করে, যাতে উপাদানগুলোর উপর পুনরাবৃত্তি করা যায়।
  2. Concrete Iterator: এটি Iterator ইন্টারফেসের বাস্তবায়ন এবং ডেটা স্ট্রাকচার (যেমন অ্যারে, লিঙ্কড লিস্ট, স্ট্যাক ইত্যাদি) এর উপর পুনরাবৃত্তি করার জন্য প্রয়োজনীয় ফাংশনালিটি প্রদান করে।
  3. Aggregate (Collection): এটি যে ডেটা স্ট্রাকচার বা সংগ্রহের উপাদানগুলোর ওপর পুনরাবৃত্তি করা হচ্ছে তার প্রতিনিধিত্ব করে। এটি সাধারণত createIterator() মেথড প্রদান করে যা Iterator অবজেক্ট তৈরি করে।

উদাহরণ: Iterator Pattern in Java

ধরা যাক, আমাদের একটি Book Collection তৈরি করতে হবে, এবং আমরা বইগুলোর মধ্যে ইটারেটরের মাধ্যমে ভ্রমণ করতে চাই।

Step-by-Step Implementation:

  1. Iterator Interface: উপাদানগুলোর উপর পুনরাবৃত্তি করার জন্য দুটি প্রধান মেথড ডিফাইন করি — hasNext() এবং next()
  2. Concrete Iterator: আমাদের BookIterator ক্লাস বাস্তবায়িত হবে যা Iterator ইন্টারফেসের মেথডগুলোকে কার্যকর করবে।
  3. Collection Interface: আমাদের BookCollection ক্লাস হবে যেখানে বইয়ের তালিকা থাকবে এবং এটি createIterator() মেথড প্রদান করবে।
// Iterator Interface
interface Iterator {
    boolean hasNext();
    Object next();
}

// Concrete Iterator
class BookIterator implements Iterator {
    private Book[] books;
    private int index;

    public BookIterator(Book[] books) {
        this.books = books;
        this.index = 0;
    }

    @Override
    public boolean hasNext() {
        return index < books.length && books[index] != null;
    }

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

// Collection Interface
interface BookCollection {
    Iterator createIterator();
}

// Concrete Collection (Book Collection)
class BookList implements BookCollection {
    private Book[] books;
    private int size;

    public BookList(int capacity) {
        books = new Book[capacity];
        size = 0;
    }

    public void addBook(Book book) {
        if (size < books.length) {
            books[size++] = book;
        }
    }

    @Override
    public Iterator createIterator() {
        return new BookIterator(books);
    }
}

// Book Class
class Book {
    private String title;
    private String author;

    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }

    @Override
    public String toString() {
        return "Book [Title: " + title + ", Author: " + author + "]";
    }
}

public class IteratorPatternExample {
    public static void main(String[] args) {
        BookList bookList = new BookList(5);
        bookList.addBook(new Book("The Catcher in the Rye", "J.D. Salinger"));
        bookList.addBook(new Book("To Kill a Mockingbird", "Harper Lee"));
        bookList.addBook(new Book("1984", "George Orwell"));

        Iterator iterator = bookList.createIterator();

        System.out.println("Books in the collection:");
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

ব্যাখ্যা:

  1. Iterator Interface: এটি দুটি মেথড ডিফাইন করে: hasNext() যা পরবর্তী উপাদান আছে কিনা তা চেক করে, এবং next() যা পরবর্তী উপাদান ফেরত দেয়।
  2. BookIterator: এটি Iterator ইন্টারফেসের বাস্তবায়ন এবং এটি বইয়ের তালিকায় ভ্রমণ করার জন্য hasNext() এবং next() মেথড ডিফাইন করে।
  3. BookList: এটি একটি BookCollection যা একটি বইয়ের তালিকা সংরক্ষণ করে এবং createIterator() মেথডের মাধ্যমে BookIterator প্রদান করে।
  4. Book Class: এটি বইয়ের তথ্য সংরক্ষণ করে (যেমন: নাম এবং লেখক) এবং এটি একটি toString() মেথড প্রদান করে যাতে বইয়ের তথ্য সুন্দরভাবে প্রিন্ট করা যায়।

আউটপুট:

Books in the collection:
Book [Title: The Catcher in the Rye, Author: J.D. Salinger]
Book [Title: To Kill a Mockingbird, Author: Harper Lee]
Book [Title: 1984, Author: George Orwell]

Iterator Pattern এর সুবিধা:

  1. Encapsulation of Data: Iterator Pattern ডেটা স্ট্রাকচারের অভ্যন্তরীণ কাঠামো লুকিয়ে রাখে, ফলে ব্যবহারকারীরা ইটারেটরের মাধ্যমে ডেটার উপাদানগুলির উপর কাজ করতে পারে এবং ডেটা স্ট্রাকচারের বাস্তবায়ন জানার প্রয়োজন পড়ে না।
  2. Uniform Access: বিভিন্ন ধরনের ডেটা স্ট্রাকচারের উপর একীভূতভাবে ভ্রমণ করতে পারে। উদাহরণস্বরূপ, একটি অ্যারে বা লিঙ্কড লিস্টে একই ইন্টারফেস ব্যবহার করে ভ্রমণ করা যায়।
  3. Simplifies Collection Access: ইটারেটর ব্যবহার করে ডেটা স্ট্রাকচারগুলির মধ্যে একে একে উপাদান ভ্রমণ করা সহজ এবং কোডের পুনঃব্যবহারযোগ্যতা বাড়ে।

Iterator Pattern এর সীমাবদ্ধতা:

  1. Extra Overhead: কখনও কখনও, Iterator Pattern এর প্রয়োগ অতিরিক্ত জটিলতা এবং ওভারহেড সৃষ্টি করতে পারে, বিশেষ করে ছোট বা সোজা ডেটা স্ট্রাকচারের জন্য।
  2. Limited Flexibility: Iterator সাধারণত একটি সুনির্দিষ্ট ধরনের ভ্রমণ পদ্ধতি প্রদান করে এবং সেটিকে পরিবর্তন করার জন্য পুনরায় Iterator ইন্টারফেস তৈরি করতে হতে পারে।

সারাংশ

Iterator Pattern হল একটি শক্তিশালী ডিজাইন প্যাটার্ন যা ডেটা স্ট্রাকচারের উপাদানগুলির উপর একে একে ভ্রমণ করার জন্য একটি সঙ্গতিপূর্ণ এবং নমনীয় পদ্ধতি প্রদান করে। এটি ডেটা স্ট্রাকচার এবং তাদের ভ্রমণের মধ্যে বিভাজন তৈরি করে, যার ফলে কোডটি আরও রিডেবল এবং বজায় রাখার উপযোগী হয়। এটি Java Collections Framework তে ব্যবহৃত হয়, যেমন List, Set, এবং Map এর উপাদান ভ্রমণ করতে।

Content added By
Promotion

Are you sure to start over?

Loading...