public void addExtension(String extensionType, PartExtension extension) { ..… } public PartExtension getExtension(String extensionType) { ..… } } public class CSVPiecepartExtension implements CSVPartExtension { public String getCSV() { StringBuffer b = new StringBuffer(“Piecepart,”); b.append(itsPiecePart.getpartNumber()); …. Return b.toString(); } } public class CSVAssemblyExtension implements CSVPartExtension { public String getCSV() { StringBuffer b = new StringBuffer(“Assembly,”); b.append(itsPiecePart.getpartNumber()); …. Iterator I = itsAssembly.getParts(); while(i.hasNext()) { Part p = (Part)i.next(); CSVPartExtension ce = (CSVPartExtension) p.getExtenstion(“CSV”); b.append(“,{“); b.append(ce.getCSV()); …. } return b.toString(); } }