class Dagligvarer { Vare foerste, siste; public Vare kjoepVare(boolean erAllergisk, String navn) { Vare vare = foerste.finnVareR(erAllergisk, navn); return vare; } public void leggTil(Vare vare) { if (foerste == null) { foerste = siste = vare; } else { siste.neste = vare; siste = vare; } } } class Vare { Vare neste = null; String navn; public Vare(String navn) { this.navn = navn; } public Vare finnVareR(boolean erAllergisk, String navn) { if ((!erAllergisk || this instanceof Allergivennlig) && this.navn.equals(navn)) { return this; } if (neste != null) { return neste.finnVareR(erAllergisk, navn); } return null; } public Vare finnVareI(boolean erAllergisk, String navn) { Vare peker = this; while (peker != null) { if ((!erAllergisk || peker instanceof Allergivennlig) && peker.navn.equals(navn)) { return peker; } peker = peker.neste; } // peker == null return null; } } class GlutenfriVare extends Vare implements Allergivennlig { String miljoemerke = null; public GlutenfriVare(String navn) { super(navn); } public GlutenfriVare(String navn, String miljoemerke) { super(navn); this.miljoemerke = miljoemerke; } public String friFor() { return "Gluten"; } public String miljoemerke() { return miljoemerke; } } interface Allergivennlig { public String friFor(); public String miljoemerke(); // for eksempel svanemerket, ?-merket osv. }