algorytm.org

Implementacja w Java

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Obserwator (observer) - Implementacja w Java
Ocena użytkownikóww: *****  / 12
SłabyŚwietny
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();
	}
}
Dodaj komentarz