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.cs:
/****************************************
* Wzorzec Projektowy Observer *
* (obserwator) *
* www.algorytm.org *
* Opracowal Dworak Kamil *
*****************************************/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Main
{
interface Obserwowany
{
void dodajObserwatora(Obserwator o);
void usunObserwatora(Obserwator o);
void powiadamiajObserwatorow();
}
interface Obserwator
{
/* aktualizuje dane */
void update(int[] wyniki);
}
interface Media
{
/* publikuje wyniki losowania */
void informuj();
}
/* oberwowany obiekt */
class TotoLotek : Obserwowany
{
private ArrayList obserwatorzy;
private int[] wyniki;
public TotoLotek()
{
obserwatorzy = new ArrayList();
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.RemoveAt(index);
}
public void powiadamiajObserwatorow()
{
Obserwator[] tab = (Obserwator[])obserwatorzy.ToArray(typeof(Obserwator));
for (int i = 0; i < tab.Length ; i++)
{
tab[i].update(wyniki);
}
}
public void kolejneLosowanie()
{
int i = 0;
Random random = new Random();
while (i < 6)
{
bool powtorka = false;
int x = random.Next(48);// (Math.random() * 47 - 1);
for (int j = 0; j < 6; j++)
{
if (wyniki[j] == x)
{
powtorka = true;
}
}
if (powtorka == false)
{
wyniki[i++] = x;
}
}//while
powiadamiajObserwatorow();
}
public int[] getResults()
{
return wyniki;
}
}//class
/* obserwator */
class Telewizja : 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()
{
Console.WriteLine("Dzisiejsze losowanie Totolotka by TVP");
for (int i = 0; i < 6; i++)
Console.Write(wyniki[i] + " ");
Console.WriteLine();
}
public void spadam()
{
lotek.usunObserwatora(this);
}
}
class Internet : 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()
{
Console.WriteLine("Wyniki TotoLotka na stronie internetowej");
for (int i = 0; i < 6; i++)
Console.Write(wyniki[i] + " ");
Console.WriteLine();
}
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();
Console.WriteLine("LOSOWANIE 1\n");
telewizja.informuj();
internet.informuj();
totoLotek.kolejneLosowanie();
Console.WriteLine("\nLOSOWANIE 2\n");
telewizja.informuj();
internet.informuj();
/* telewizja juz nie obserwuuje wynikow, nie bedzie miec aktualnych losowan */
telewizja.spadam();
totoLotek.kolejneLosowanie();
Console.WriteLine("\nLOSOWANIE 3\n");
telewizja.informuj();
internet.informuj();
String s = Console.ReadLine();
}
}
}


"Error 1 The namespace 'Main' already contains a definition for 'Obserwator'...