Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 3.118 pregleda

Najnovija ↓

Pitanje oko Observer pattern-a 25.05.2010. u 17:05 · pre 200 meseci
izmenjeno 1 put, poslednji put Shadowed 25.05.2010. u 17:44
  1. Shadowed25.05.2010. u 17:44zapis iz teksta poruke
#1
Da li Subject uvek mora da ima instance svojih observer-a u sebi?
Vezano za .NET, da li je observer u sustini ista stvar kao delegat u .NET-u i da li je u primeru kako sam ga ja sastvaio dole "Update()" u stvari ta Callback metoda?
Primer kako ja mislim da se radi sa observerom:
Code (csharp):

public partial class frmSubject : Form, ISubject
    {        
        public List<IObserver> ObserversList = new List<IObserver>();

        public frmSubject()
        {
            InitializeComponent();
            RegisterObserver(new frmObserver());
        }

        private void btnNotify_Click(object sender, EventArgs e)
        {
            NotifyObservers();
        }        

        public void RegisterObserver(IObserver observer)
        {
            if (observer is IObserver)
            {
                ObserversList.Add(observer);
            }
        }

        public void RemoveObserver(IObserver observer)
        {
            if (observer is IObserver)
            {
                ObserversList.Remove(observer);
            }
        }

        public void NotifyObservers()
        {
            foreach (IObserver io in ObserversList)
            {
                io.Update("Clicked");
            }
        }      
    }
 


Code (csharp):

public partial class frmObserver : Form, IObserver
    {
        public frmObserver()
        {
            InitializeComponent();
            this.Show();
        }              

        public void Update(string msg)
        {            
            lstEmployee.Items.Add(msg);
            lstManager.Items.Add(msg);
        }
    }
 
Re: Pitanje oko Observer pattern-a 25.05.2010. u 17:24 · pre 200 meseci #2
Sustinski, u lokalu da (u principu MulticastEvent je subject, delegat je observer), mada observer patern moze da bude mnogo vise od toga jer ne mora da bude ogranicen na aplikacioni domen. Mozes sa njim komotno da napravis neki distributed event sistem.
Pogledaj ovde za vise detalja: http://msdn.microsoft.com/en-us/library/ee817669.aspx


(i btw, ne treba ti "is" provera u register/remove, strong typed jezik kako c# blokira neispravne parametre pri kompajliranju)
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Pitanje oko Observer pattern-a 25.05.2010. u 17:30 · pre 200 meseci #3
Ako sam ja to dobro skontao delegati su napravljeni po uzoru na observer šablon, ali ti ne moraš da koristiš delegate da bi napravio svoju implementaciju observer šablona. Ja ne koristim šablone u radu u smislu da dok programiram kažem sebi ovde ću da upotrebim ovaj šablon, a onde onaj. Koristim ih u smislu da napravim programersko rešenje, za koje se ispostavlja da je neko prozvao u šablon i dao mu ime. Ne treba se opterećivati mnogo šablonima. Mada, neke moje kolege se lože na njih, i umeju da ih koriste.
Re: Pitanje oko Observer pattern-a 25.05.2010. u 19:49 · pre 200 meseci #4
Vidim da ti u stvari i nisam odgovorio na prvo pitanje, odgovor je da, subject mora da ima instance obzervera da implementirao pattern.

Sad mi je pala na pamet jos jedna razlika izmedju .net eventa i observer paterna. .NET event/delegate sistem je uvezan direktno 1-1, tj event implementira subject za samo jednu poruku. U custom implementaciji nisi ogranicen na samo jednu poruku, tj IObserver moze da implementira vise metoda (npr Update, Reset, itd) i subject moze da ima vise notify kanala. Iako nije bas "koser" po specifikaciji, moguce je (sa eventom nije). U COMu je source/sink je bio direktna fabricka implementacija observer paterna (source je subject, sink je observer) koja je "fabricki" podrzana kroz IConnectionPoint i IConnectionPointContainer interfejse (koje source tj subject mora da implementira).
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Pitanje oko Observer pattern-a 25.05.2010. u 21:29 · pre 200 meseci #5
Hvala, msdn clanak je odlican. A ovo sto se tice callback metode to je u stvari metoda u observer-u odnosno u .NET-u metoda koja hendla event jel da?
Re: Pitanje oko Observer pattern-a 25.05.2010. u 21:33 · pre 200 meseci #6
da
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme