//package Dekorator; import java.util.*; // "Komponenta" abstract class ElemenatBiblioteke { // polja private int brojKopija; public int VratiBrojKopija() { return brojKopija; } public void PostaviBrojKopija(int vrednost) { brojKopija = vrednost; } public abstract void Prikazi(); } // "KonkretnaKomponenta" class Knjiga extends ElemenatBiblioteke { // polja private String autor; private String naslov; // Konstruktori public Knjiga( String autor, String naslov, int brojKopija ) { this.autor = autor; this.naslov = naslov; PostaviBrojKopija( brojKopija ); } // Metodi public void Prikazi() { System.out.println( "\nKnjiga ------ " ); System.out.println( " Autor: " + autor ); System.out.println( " Naslov: " + naslov ); System.out.println( " Broj kopija: " + VratiBrojKopija() ); } } // "KonkretnaKomponenta" class Video extends ElemenatBiblioteke { // polja private String reziser; private String naslov; private int vremeTrajanja; // Konstruktor public Video( String reziser, String naslov, int brojKopija, int vreme ) { this.reziser = reziser; this.naslov = naslov; PostaviBrojKopija( brojKopija ); this.vremeTrajanja = vreme; } // Metodi public void Prikazi() { System.out.println( "\nVideo ----- " ); System.out.println( " Reziser: " + reziser ); System.out.println( " Naslov: " + naslov ); System.out.println( " Broj kopija: " + VratiBrojKopija() ); System.out.println( " Vreme trajanja: " + vremeTrajanja ); } } // "Dekorator" abstract class Dekoracija extends ElemenatBiblioteke { // polja protected ElemenatBiblioteke elemenat; // Konstruktori public Dekoracija ( ElemenatBiblioteke elemenat ) { this.elemenat = elemenat; } // Metodi public void Prikazi() { elemenat.Prikazi(); } } // "KonkretanDekorator" class ZaPozajmicu extends Dekoracija { // polja protected ArrayList uzeli = new ArrayList(); // Konstruktori public ZaPozajmicu( ElemenatBiblioteke elemenat ) { super( elemenat ); } // Metodi public void Uzmi( String ime ) { uzeli.add( ime ); elemenat.PostaviBrojKopija(elemenat.VratiBrojKopija()-1); } public void Vrati( String ime ) { uzeli.remove( ime ); elemenat.PostaviBrojKopija(elemenat.VratiBrojKopija()+1); } public void Prikazi() { super.Prikazi(); for( int i=0; i