• Skip to primary navigation
  • Skip to content
  • Skip to primary sidebar
  • Skip to footer
  • Core Java
  • Design Patterns
  • JSP
  • Servlets
  • Building Tools
  • jQuery
  • Spring
  • Hibernate
  • Mongo DB
  • More
    • HTML
    • SCJP
    • AJAX
    • UML
    • Struts
    • J2EE
    • Testing
    • Angular JS

J2EE Reference

  • Home
  • About Us
    • Java Learning Centers
  • Contact Us

Iterator Design Pattern Implementation using Java

July 21, 2017 By j2eereference Leave a Comment

What is Iterator Design Pattern?

Iterator design pattern is used for finding a method to operate the elements in a collection in an orderly approach without any need for knowing its primary representation. Iterator pattern is a type of behavioural pattern and it is the most frequently used design pattern in Java programming.

Iterator Design Pattern Implementation Using Java

Consider an example containing list of movies.  Client program requires traversing through the list of movies on the whole or based on the language of the movie. Few client programs might require only English movies and they want to access only English movies by avoiding other languages. In this case, Iterator design pattern can be utilized and iteration can be offered on the basis of language of the movie.

Given below is the complete source code to implement this scenario using Iterator design pattern:

Movie.java

Movie.java is a plain POJO class which includes elements, movieName and language.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Movie {
private String movieName;
private String movieLanguage;
public Movie(String movieName, String movieLanguage) {
this.movieName = movieName;
this.movieLanguage = movieLanguage;
}
public String getMovieName() {
return movieName;
}
public void setMovieName(String movieName) {
this.movieName = movieName;
}
public String getMovieLanguage() {
return movieLanguage;
}
public void setMovieLanguage(String movieLanguage) {
this.movieLanguage = movieLanguage;
}
}

iPlayer.java

iPlayer is the base interface.

Java
1
2
3
4
5
6
7
8
import java.util.List;
 
public interface iPlayer {
public List<Movie> getMovies();
public void addMovie(Movie movie);
public void removeMovie(Movie movie);
public iIterator createIterator(String iteratorType);
}

PlayerImpl.java
Next step is to implement the Iterator.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.ArrayList;
import java.util.List;
 
public class PlayerImpl implements iPlayer {
List<Movie> movieList;
 
public PlayerImpl() {
movieList = new ArrayList<Movie>();
}
 
@Override
public List<Movie> getMovies() {
 
return movieList;
}
 
@Override
public void addMovie(Movie movie) {
movieList.add(movie);
}
 
@Override
public void removeMovie(Movie movie) {
movieList.remove(movie);
}
 
@Override
public iIterator createIterator(String iteratorType) {
if ("English".equals(iteratorType)) {
return new EnglishIterator(movieList);
} else {
return new GermanIterator(movieList);
}
}
}

Here the iIterator interface is implemented by inner class style of implementation. So this implementation can never be utilized by any other aggregate.

iIterator.java

Java
1
2
3
4
5
public interface iIterator {
public Movie nextMovie ();
public boolean isLastMovie();
public Movie currentMovie();
}

EnglishIterator.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.List;
 
public class EnglishIterator implements iIterator{
private List<Movie> movieList;
private int position;
 
public EnglishIterator(List<Movie> movieList) {
this.movieList = movieList;
}
@Override
public Movie nextMovie() {
Movie movie = null;
for (; position < movieList.size(); position++) {
if ("English".equals(movieList.get(position).getMovieLanguage())) {
movie = movieList.get(position);
position++;
break;
}
}
return movie;
}
 
@Override
public boolean isLastMovie() {
for (int i = position; i < movieList.size(); i++) {
if ("English".equals((movieList.get(i)).getMovieLanguage())) {
return false;
}
}
return true;
}
 
@Override
public Movie currentMovie() {
if (position < movieList.size()) {
return movieList.get(position);
}
return null;
}
}

GermanIterator.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.List;
 
public class GermanIterator implements iIterator {
List<Movie> movieList;
private int position;
 
public GermanIterator(List<Movie> movieList) {
this.movieList = movieList;
}
 
@Override
public Movie nextMovie() {
Movie movie = null;
for (; position < movieList.size(); position++) {
if ("German".equals((movieList.get(position)).getMovieLanguage())) {
movie = movieList.get(position);
position++;
break;
}
}
return movie;
}
 
@Override
public boolean isLastMovie() {
for (int i = position; i < movieList.size(); i++) {
if ("German".equals((movieList.get(i)).getMovieLanguage())) {
return false;
}
}
return true;
}
 
@Override
public Movie currentMovie() {
if (position < movieList.size()) {
return movieList.get(position);
}
return null;
}
}

IteratorCheck.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class IteratorCheck {
public static void main(String args[]) {
PlayerImpl player = new PlayerImpl();
player.addMovie(new Movie("Father", "English"));
player.addMovie(new Movie("Mummy", "English"));
player.addMovie(new Movie("Vater", "German"));
player.addMovie(new Movie("Godfather", "English"));
player.addMovie(new Movie("Wilder Stier", "German"));
 
iIterator englishIterator = player.createIterator("English");
while (!englishIterator.isLastMovie()) {
System.out.println("English Movie: "
+ englishIterator.nextMovie().getMovieName());
}
 
iIterator germanIterator = player.createIterator("German");
while (!germanIterator.isLastMovie()) {
System.out.println("German Movie: "
+ germanIterator.nextMovie().getMovieName());
}
}
}

Output will be:

English Movie: Father
English Movie: Mummy
English Movie: Godfather
German Movie: Vater
German Movie: Wilder Stier

Related Posts

  • Strategy Design Pattern Implementation using Java
  • Decorator Design Pattern
  • Adapter Design Pattern Implementation using Java
  • GOF Design Patterns
  • History and Need for Design Patterns
  • Command Design Pattern
  • Template Design Pattern
  • Proxy design pattern
  • Singleton in Clustered Environment
  • Observer pattern

Filed Under: Design Patterns

Reader Interactions

Leave a Reply Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Primary Sidebar

FOLLOW US ONLINE

  • View J2eereference-166104970118637’s profile on Facebook
  • View j2eereference’s profile on Twitter
  • View j2eereference’s profile on LinkedIn

Subscribe by email

Recent posts

  • Java Buzzwords
  • Anonymous Inner Class in Java
  • Network Programming – java.net Package
  • Java Regular Expressions
  • Method Local Inner Class in Java
  • URL Processing in Java
  • Iterator Design Pattern Implementation using Java
  • Strategy Design Pattern Implementation using Java
  • Decorator Design Pattern
  • Adapter Design Pattern Implementation using Java
  • JSF Composite Components
  • JSF UI Components
  • What is JavaServer Faces (JSF)?
  • GOF Design Patterns
  • History and Need for Design Patterns

Footer

Core Java
Design Patterns
JSP
Servlets
HTML
Building Tools
AJAX
SCJP
jQuery
Testing
Spring
UML
Struts
Java Centers
Java Training
Home
About Us
Contact Us
Copyright © j2eereference.com. All right reserved.