//package Dekorator; // "Komponenta" abstract class Komponenta { // Metodi abstract public void Operacija(); } // "KonkretnaKomponenta" class KonkretnaKomponenta extends Komponenta { // Metodi public void Operacija() { System.out.println("KonkretnaKomponenta.Operacija()"); } } // "Dekorator" abstract class Dekorator extends Komponenta { // polja protected Komponenta komponenta; // Metodi public void DekorisiKomponentu(Komponenta komponenta) { this.komponenta = komponenta; } public void Operacija() { if (komponenta != null) komponenta.Operacija(); } } // "KonkretniDekoratorA" class KonkretniDekoratorA extends Dekorator { // polja private String addedState; // Metodi public void Operacija() { super.Operacija(); addedState = "novo stanje"; System.out.println("KonkretniDekoratorA.Operacija()"); } } // "KonkretniDekoratorB" class KonkretniDekoratorB extends Dekorator { // Metodi public void Operacija() { super.Operacija(); AddedBehavior(); System.out.println("KonkretniDekoratorB.Operacija()"); } void AddedBehavior() { } } /// test public class Ilustracija { public static void main(String[] args) { // kreiraj KonkretnuKomponentu i dva Dekoratera KonkretnaKomponenta c = new KonkretnaKomponenta(); KonkretniDekoratorA d1 = new KonkretniDekoratorA(); d1.DekorisiKomponentu(c); KonkretniDekoratorB d2 = new KonkretniDekoratorB(); d2.DekorisiKomponentu(d1); d2.Operacija(); } } /* ZAKLJUCAK 1. Dekorator prosledjuje zahteve za dekoracijom dekorateru A koji izvrsava dekorisanje komponente c. Nakon prosledjivanja zahteva, u vreme izvrsavanja, pripaja se i dekorater B sa svojim specificnim dekoracijama i operacijama. */ */