Nadesłany przez Kamil Dworak, 10 sierpnia 2010 22:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Obserwator.java:
/**************************************** * Wzorzec Projektowy Observer * * (obserwator) * * www.algorytm.org * * Opracowal Dworak Kamil * *****************************************/ import java.util.*; import java.math.*; interface Obserwowany { public void dodajObserwatora(Obserwator o); public void usunObserwatora(Obserwator o); public void powiadamiajObserwatorow(); } interface Obserwator { /* aktualizuje dane */ public void update(int[]wyniki); } interface Media { /* publikuje wyniki losowania */ public void informuj(); } /* oberwowany obiekt */ class TotoLotek implements Obserwowany { private ArrayList<Obserwator> obserwatorzy; private int[]wyniki; public TotoLotek(){ obserwatorzy = new ArrayList<Obserwator>(); wyniki = new int[]{0,0,0,0,0,0}; } public void dodajObserwatora(Obserwator o){ obserwatorzy.add(o); } public void usunObserwatora(Obserwator o){ int index = obserwatorzy.indexOf(o); obserwatorzy.remove(index); } public void powiadamiajObserwatorow(){ for(Obserwator o : obserwatorzy){ o.update(wyniki); } } public void kolejneLosowanie(){ int i = 0; while(i<6){ boolean powtorka = false; double x = (Math.random()*47-1); for(int j = 0 ; j < 6; j++){ if(wyniki[j]==(int)x){ powtorka = true; } } if(powtorka==false){ wyniki[i++]=(int)x; } }//while powiadamiajObserwatorow(); } public int[] getResults(){ return wyniki; } }//class /* obserwator */ class Telewizja implements Obserwator, Media { private int[] wyniki; private TotoLotek lotek; public Telewizja(TotoLotek lotek){ wyniki = new int[6]; this.lotek = lotek; } public void update(int[]tab){ for(int i=0;i<6;i++){ wyniki[i]=tab[i]; } } public void informuj(){ System.out.println("Dzisiejsze losowanie Totolotka by TVP"); for(int i:wyniki) System.out.print(i + " "); System.out.println(); } public void spadam(){ lotek.usunObserwatora(this); } } class Internet implements Obserwator, Media { private int[] wyniki; private TotoLotek lotek; public Internet(TotoLotek lotek){ wyniki = new int[6]; this.lotek = lotek; } public void update(int[] tab){ for(int i=0;i<6;i++){ wyniki[i]=tab[i]; } } public void informuj(){ System.out.println("Wyniki TotoLotka na stronie internetowej"); for(int i:wyniki) System.out.print(i + " "); System.out.println(); } public void spadam(){ lotek.usunObserwatora(this); } } public class Obserwator { public static void main(String[]args){ TotoLotek totoLotek = new TotoLotek(); Telewizja telewizja = new Telewizja(totoLotek); Internet internet = new Internet(totoLotek); totoLotek.dodajObserwatora(telewizja); totoLotek.dodajObserwatora(internet); totoLotek.kolejneLosowanie(); System.out.println("LOSOWANIE 1\n"); telewizja.informuj(); internet.informuj(); totoLotek.kolejneLosowanie(); System.out.println("\nLOSOWANIE 2\n"); telewizja.informuj(); internet.informuj(); /* telewizja juz nie obserwuuje wynikow, nie bedzie miec aktualnych losowan */ telewizja.spadam(); totoLotek.kolejneLosowanie(); System.out.println("\nLOSOWANIE 3\n"); telewizja.informuj(); internet.informuj(); } }