interface Hamburger { String hentBeskrivelse(); double hentPris(); } class HamburgerBasis implements Hamburger { @Override public String hentBeskrivelse() { return "Hamburger"; } @Override public double hentPris() { return 50.0; } } abstract class HamburgerDecorater implements Hamburger { private final Hamburger decoratedHamburger; public HamburgerDecorater(Hamburger hamburger) { this.decoratedHamburger = hamburger; } @Override public String hentBeskrivelse() { return decoratedHamburger.hentBeskrivelse(); } @Override public double hentPris() { return decoratedHamburger.hentPris(); } } class MedOst extends HamburgerDecorater { MedOst(Hamburger hamburger) { super(hamburger); } public String hentBeskrivelse() { return super.hentBeskrivelse() + ", med ost"; } public double hentPris() { return super.hentPris() + 10; } } class UtenSylteagurk extends HamburgerDecorater { UtenSylteagurk(Hamburger hamburger) { super(hamburger); } public String hentBeskrivelse() { return super.hentBeskrivelse() + ", uten sylteagurk"; } public double hentPris() { return super.hentPris() - 5; } } class Hamburgerbar { public static void main(String[] args) { Hamburger burger = new HamburgerBasis(); burger = new MedOst(burger); burger = new UtenSylteagurk(burger); System.out.println(burger.hentBeskrivelse() + ", " + burger.hentPris()); } }