import java.util.ArrayList;
import java.util.List;

/**
 * {@link <a href=
 * "https://[Log in to view URL]"
 * target= "_blank"></a>}
 * 
 * @author itammb ( Italia Massimiliano Buscati )
 * @version JDK 1.15
 *
 */
class Main {
public interface Iterator<T> {
		boolean hasNext();

		T next();
	}

	public static class BookConcreteIterator implements Iterator<Book> {
		private List<Book> books;
		private int position = 0;

		public BookConcreteIterator(List<Book> books) {
			this.books = books;
		}

		@Override
		public boolean hasNext() {
			return position < books.size();
		}

		@Override
		public Book next() {
			return books.get(position++);
		}
	}

	public static class Book {
		private String title;

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

		public String getTitle() {
			return title;
		}
	}

	interface IterableBookCollection {
		Iterator<Book> createIterator();
	}

	public static class ConcreteCollectionLibrary implements IterableBookCollection {
		private List<Book> books = new ArrayList<>();

		public void addBook(Book book) {
			books.add(book);
		}

		@Override
		public Iterator<Book> createIterator() {
			return new BookConcreteIterator(books);
		}
	}

	public static void main(String args[]) {
		// Unit test - uso del design pattern: iterator
		ConcreteCollectionLibrary library = new ConcreteCollectionLibrary();
		library.addBook(new Book("Design Patterns"));
		library.addBook(new Book("Clean Code"));
		library.addBook(new Book("Effective Java"));

		Iterator<Book> iterator = library.createIterator();

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

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: