I'm tackling the following question:
The iterator design pattern is one that has strong encapsulation. As an example; a library wants a book management system. A class for the book
s storing their details and a class for the library
storing the books and the shelf number. Lets say the library wants the data stored in a database using JDBC
.
How can the Iterator design pattern be implemented using JDBC ensuring encapsulation of the data?
My concern is where the database is being handled and how the data is being shared across the application.
Can the database handler be an inner-class of the library class? Is it then possible to save the data and retrieve it on request without affecting the encapsulation?
I am still learning and have a long way to go so be gentle :)
This is an aproximation about the use of Iterator pattern accesing to database.
package tk.ezequielantunez.stackoverflow.examples;
import java.util.Collection;
import java.util.Iterator;
/**
* Paged implementatios of a DAO. Iterator interface is used.
* Nottice you get pages of Collections, where resides your data.
* @author Ezequiel
*/
public class DAOIterator implements Iterator<Collection> {
int actualPage;
int pageSize;
public DAOIterator(int pageSize) {
this.actualPage = 0;
this.pageSize = pageSize;
}
/**
* Indicates if you have more pages of datga.
*/
@Override
public boolean hasNext() {
return actualPage < getTotalPages();
}
/**
* Gets the next page of data.
*/
@Override
public Collection next() {
return getPage(++actualPage);
}
@Override
public void remove() {
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* Calculates total number of pages.
*/
private int getTotalPages() {
/* You could do a count of total results and divide them by pageSize */
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* Get a page of results with X objects, where X is the pageSize used in
* constructor.
*/
private Collection getPage(int page) {
/* Get data from database here */
throw new UnsupportedOperationException("Not supported yet.");
}
}