Fly weight Factory
/* 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("----------------"); } }
1. | Abstract Factory Pattern- Example | ||
2. | Abstract Factory Pattern in Java 2 | ||
3. | Factory Method Pattern in Java | ||
4. | Illustrates use of Abstract Factory pattern |