Mega Code Archive

 
Categories / Java Tutorial / Design Pattern
 

Iterator pattern for container

import java.util.ArrayList; import java.util.Iterator; public class TestCorporation {   public static void main(String args[]) {     Corporation corporation = new Corporation();     Division rnd = new Division("R&D");     rnd.add(new VP("A", "R&D"));     rnd.add(new VP("B", "R&D"));     rnd.add(new VP("C", "R&D"));     Division sales = new Division("Sales");     sales.add(new VP("E", "Sales"));     sales.add(new VP("F", "Sales"));     sales.add(new VP("G", "Sales"));     sales.add(new VP("F", "Sales"));     Division western = new Division("Sales");     western.add(new VP("W", "Sales"));     western.add(new VP("Z", "Sales"));     sales.add(western);     VP vp = new VP("Cary", "At Large");     corporation.add(rnd);     corporation.add(sales);     corporation.add(vp);     corporation.print();   } } class Corporation extends Corporate {   private ArrayList<Corporate> corporate = new ArrayList<Corporate>();   public Corporation() {   }   public void add(Corporate c) {     corporate.add(c);   }   public void print() {     Iterator iterator = corporate.iterator();     while (iterator.hasNext()) {       Corporate c = (Corporate) iterator.next();       c.print();     }   } } abstract class Corporate {   public String getName() {     return "";   }   public void add(Corporate c) {   }   public Iterator iterator() {     return null;   }   public void print() {   } } class Division extends Corporate {   private Corporate[] corporate = new Corporate[100];   private int number = 0;   private String name;   public Division(String n) {     name = n;   }   public String getName() {     return name;   }   public void add(Corporate c) {     corporate[number++] = c;   }   public Iterator iterator() {     return new DivisionIterator(corporate);   }   public void print() {     Iterator iterator = iterator();     while (iterator.hasNext()) {       Corporate c = (Corporate) iterator.next();       c.print();     }   } } class VP extends Corporate {   private String name;   private String division;   public VP(String n, String d) {     name = n;     division = d;   }   public String getName() {     return name;   }   public void print() {     System.out.println("Name: " + name + " Division: " + division);   }   public Iterator iterator() {     return new VPIterator(this);   } } class VPIterator implements Iterator {   private VP vp;   public VPIterator(VP v) {     vp = v;   }   public VP next() {     return vp;   }   public boolean hasNext() {     return false;   }   public void remove() {   } } class DivisionIterator implements Iterator {   private Corporate[] corporate;   private int location = 0;   public DivisionIterator(Corporate[] c) {     corporate = c;   }   public Corporate next() {     return corporate[location++];   }   public boolean hasNext() {     if (location < corporate.length && corporate[location] != null) {       return true;     } else {       return false;     }   }   public void remove() {   } }