//package Posmatrac; import java.util.Observer; import java.util.Observable; class Semafor extends Observable { String boja = "crvena"; public void Zaustavljaj() { if( boja == "zuta") { boja = "crvena"; setChanged(); notifyObservers(); } else if ( boja == "zelena" ) { boja = "zuta"; setChanged(); notifyObservers(); } } public void Propustaj() { if( boja == "zuta") { boja = "zelena"; setChanged(); notifyObservers(); } else if ( boja == "crvena" ) { boja = "zuta"; setChanged(); notifyObservers(); } } public String getBoja() { return boja; } } class UzoranVozac implements Observer { String ime; // ime vozaca // konstruktor public UzoranVozac( String ime ) { this.ime = ime; } // metod se poziva prilikom opservacije //objekta koji se menja public void update(Observable semafor, Object o) { String boja = ((Semafor) semafor).getBoja(); if( boja == "crvena" ) System.out.println( ime + ": Ja sam uzoran vozac. Na crveno stojim." ); else if( boja == "zuto" ) System.out.println( ime + ": Ja sam uzoran vozac. Na zuto se pripremam." ); else if( boja == "zeleno" ) System.out.println( ime + ": Ja sam uzoran vozac. Na zeleno krecem." ); } } class PakleniVozac implements Observer { String ime; // ime vozaca // konstruktor public PakleniVozac( String ime ) { this.ime = ime; } // metod se poziva prilikom opservacije //objekta koji se menja public void update(Observable semafor, Object o) { String boja = ((Semafor) semafor).getBoja(); if( boja == "crvena" ) System.out.println( ime + ": Ne interesuje me semafor! Ovo je vreme paklenih vozaca!" ); else if( boja == "zuto" ) System.out.println( ime + ": Zuto=>stisni gas kako bi prosao kroz semafor!" ); else if( boja == "zeleno" ) System.out.println( ime + ": Steta sto nije crveno, pa da projurim!" ); } } public class RealanSlucaj2 { public static void main(String[] args) { Semafor semafor = new Semafor(); Observer[] cekaju = { new UzoranVozac("Pera Peric"), new PakleniVozac("Flojd"), new UzoranVozac("Marko Markovic"), new UzoranVozac("Janko Jankovic")}; // dodaj observere for (int i = 0; i < cekaju.length; i++) semafor.addObserver(cekaju[i]); semafor.Propustaj(); semafor.Propustaj(); semafor.Zaustavljaj(); semafor.Zaustavljaj(); } }