// Definerer interfacet for basis hamburger interface Hamburger { String hentBeskrivelse(); double hentPris(); } // Lager grunnleggende hamburger class HamburgerBasis implements Hamburger { @Override public String hentBeskrivelse() { return "Hamburger"; } @Override public double hentPris() { return 50.0; } } abstract class HamburgerDekorator implements Hamburger { private final Hamburger dekorertHamburger; public HamburgerDekorator(Hamburger hamburger) { this.dekorertHamburger = hamburger; } @Override public String hentBeskrivelse() { return dekorertHamburger.hentBeskrivelse(); } @Override public double hentPris() { return dekorertHamburger.hentPris(); } } class MedOst extends HamburgerDekorator { public MedOst(Hamburger hamburger) { super(hamburger); } @Override public String hentBeskrivelse() { return super.hentBeskrivelse() + ", med ost"; } @Override public double hentPris() { return super.hentPris() + 10.0; } } class UtenSylteagurk extends HamburgerDekorator { public UtenSylteagurk(Hamburger hamburger) { super(hamburger); } @Override public String hentBeskrivelse() { return super.hentBeskrivelse() + ", uten sylteagurk"; } @Override public double hentPris() { return super.hentPris() - 5.0; } } class Hamburgerbar { public static void main(String[] args) { // Oppretter en hamburger, legger til ost, fjerner sylteagurk Hamburger hamburger = new HamburgerBasis(); hamburger = new MedOst(hamburger); hamburger = new UtenSylteagurk(hamburger); // Skriver ut den endelige beskrivelsen og prisen p? hamburgeren System.out.println( hamburger.hentBeskrivelse() + ", koster: " + hamburger.hentPris() ); } }