Example in Java
// Flyweight object interface
public interface CoffeeOrder { public void serveCoffee(CoffeeOrderContext context);
}
// ConcreteFlyweight object that creates ConcreteFlyweight
public class CoffeeFlavor implements CoffeeOrder { private String flavor; public CoffeeFlavor(String newFlavor) { this.flavor = newFlavor; } public String getFlavor { return this.flavor; } public void serveCoffee(CoffeeOrderContext context) { System.out.println("Serving Coffee flavor " + flavor + " to table number " + context.getTable); }
}
public class CoffeeOrderContext { private int tableNumber; public CoffeeOrderContext(int tableNumber) { this.tableNumber = tableNumber; } public int getTable { return this.tableNumber; }
}
import java.util.HashMap;
import java.util.Map;
//FlyweightFactory object
public class CoffeeFlavorFactory { private Map
flavors = new HashMap; public CoffeeFlavor getCoffeeFlavor(String flavorName) { CoffeeFlavor flavor = flavors.get(flavorName); if (flavor == null) { flavor = new CoffeeFlavor(flavorName); flavors.put(flavorName, flavor); } return flavor; } public int getTotalCoffeeFlavorsMade { return flavors.size; }
}
public class TestFlyweight { /** The flavors ordered. */ private static CoffeeFlavor flavors = new CoffeeFlavor; /** The tables for the orders. */ private static CoffeeOrderContext tables = new CoffeeOrderContext; private static int ordersMade = 0; private static CoffeeFlavorFactory flavorFactory; public static void takeOrders(String flavorIn, int table) { flavors = flavorFactory.getCoffeeFlavor(flavorIn); tables = new CoffeeOrderContext(table); } public static void main(String args) { flavorFactory = new CoffeeFlavorFactory; takeOrders("Cappuccino", 2); takeOrders("Cappuccino", 2); takeOrders("Frappe", 1); takeOrders("Frappe", 1); takeOrders("Xpresso", 1); takeOrders("Frappe", 897); takeOrders("Cappuccino", 97); takeOrders("Cappuccino", 97); takeOrders("Frappe", 3); takeOrders("Xpresso", 3); takeOrders("Cappuccino", 3); takeOrders("Xpresso", 96); takeOrders("Frappe", 552); takeOrders("Cappuccino", 121); takeOrders("Xpresso", 121); for (int i = 0; i < ordersMade; ++i) { flavors.serveCoffee(tables); } System.out.println(" "); System.out.println("total CoffeeFlavor objects made: " + flavorFactory.getTotalCoffeeFlavorsMade); }
}