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();
}
}

