Design Pattern Java

/*
Software Architecture Design Patterns in Java
by Partha Kuchana 
Auerbach Publications
*/
import java.util.HashMap;
import java.util.StringTokenizer;
import java.util.Vector;
public class FlyweightTest {
  public static void main(String[] args) throws Exception {
    Vector empList = initialize();
    FlyweightFactory factory = FlyweightFactory.getInstance();
    for (int i = 0; i < empList.size(); i++) {
      String s = (String) empList.elementAt(i);
      StringTokenizer st = new StringTokenizer(s, ",");
      String name = st.nextToken();
      String title = st.nextToken();
      String division = st.nextToken();
      FlyweightIntr flyweight = factory.getFlyweight(division);
      //associate the flyweight
      //with the extrinsic data object.
      VCard card = new VCard(name, title, flyweight);
      card.print();
    }
  }
  private static Vector initialize() {
    //for simplicity values are being hardcoded.
    Vector v = new Vector();
    v.add("name1,title1,North");
    v.add("name2,title2,South");
    v.add("name3,title1,North");
    v.add("name4,title3,East");
    v.add("name5,title4,East");
    v.add("name6,title2,East");
    v.add("name7,title1,West");
    v.add("name8,title3,West");
    v.add("name9,title1,West");
    v.add("name10,title6,South");
    v.add("name11,title5,North");
    v.add("name12,title1,North");
    return v;
  }
}
class FlyweightFactory {
  private HashMap lstFlyweight;
  private static FlyweightFactory factory = new FlyweightFactory();
  private FlyweightFactory() {
    lstFlyweight = new HashMap();
  }
  public synchronized FlyweightIntr getFlyweight(String divisionName) {
    if (lstFlyweight.get(divisionName) == null) {
      FlyweightIntr fw = new Flyweight(divisionName);
      lstFlyweight.put(divisionName, fw);
      return fw;
    } else {
      return (FlyweightIntr) lstFlyweight.get(divisionName);
    }
  }
  public static FlyweightFactory getInstance() {
    return factory;
  }
  //Inner flyweight class
  private class Flyweight implements FlyweightIntr {
    private String company;
    private String address;
    private String city;
    private String state;
    private String zip;
    private void setValues(String cmp, String addr, String cty, String st,
        String zp) {
      company = cmp;
      address = addr;
      city = cty;
      state = st;
      zip = zp;
    }
    private Flyweight(String division) {
      // values are hard coded
      //for simplicity
      if (division.equals("North")) {
        setValues("CMP", "addr1", "cty1", "st1", "10000");
      }
      if (division.equals("South")) {
        setValues("CMP", "addr2", "cty2", "st2", "20000");
      }
      if (division.equals("East")) {
        setValues("CMP", "addr3", "cty3", "st3", "30000");
      }
      if (division.equals("West")) {
        setValues("CMP", "addr4", "cty4", "st4", "40000");
      }
    }
    public String getCompany() {
      return company;
    }
    public String getAddress() {
      return address;
    }
    public String getCity() {
      return city;
    }
    public String getState() {
      return state;
    }
    public String getZip() {
      return zip;
    }
  }// end of Flyweight
}// end of FlyweightFactory
interface FlyweightIntr {
  public String getCompany();
  public String getAddress();
  public String getCity();
  public String getState();
  public String getZip();
}
class VCard {
  String name;
  String title;
  FlyweightIntr objFW;
  public VCard(String n, String t, FlyweightIntr fw) {
    name = n;
    title = t;
    objFW = fw;
  }
  public void print() {
    System.out.println(name);
    System.out.println(title);
    System.out.println(objFW.getAddress() + "-" + objFW.getCity() + "-"
        + objFW.getState() + "-" + objFW.getZip());
    System.out.println("----------------");
  }
}