Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

Нова тема
Observer Patterns in Java
Тази тема е погледната 394 пъти
Добави темата към любими | Принтирай темата | Нова тема 
Публикувано на: 15.06.2008 21:29
sunnyface
Чирак

Мнения: (8)

Търсих във форума, но не намерих теми или уроци свързани с тази интересна тема с интересни приложения.
не гарантирам, че инфото е 100% вярно, но понеже сега се занимавам с това(имам домашно очевидно, не е по свободна воля) реших да пусна малко полезна информация на фона на останалите теми в тон моля ви хора помогнете и т.н

Observer Patterns

Става въпрос за вид design pattern, който се използва са наблюдние на състоянието на обект или програма. Намира приложения при програми, където се имплементират Threads или Events.

В общи линии става въпрос за връзката между един клас(във Википедия го наричат Субект), който искаме да наблюдаваме(Главен клас) и отделните класове Наблюдатели(които очевидно го наблюдават).
Наблюдателите са зависими от промените в главния клас.

Главният клас е подклас на Observable
Главният клас съдържа:
-списък с наблюдателите, които го наблюдават, примерно някакъв вид Collection: public ArrayList<TickerClient> observers =new ArrayList();
методи:
-за добавяне на обзървери
-премахване
-notifyObservers()- осведомява относно промени

Обзърверите имплементират интърфейса Observer, който изисква използването на метод update(Observable o, Object ob)

Обзървър доколкото разбирам може да следи отделни параметри на главния клас(нампример ако в главн клас има параметър цена)

На няколко места виждам, че гл клас се означава като Source, което напомня на аплетите и ивентите, които се също имат нещо общо с това...

Имам освен това някои въпроси, ако някой случайно знае:
1.имаме следния метод
    public void notifyObservers(){
          Iterator i = observers.iterator();
          while( i.hasNext() ) {
          Observer o = ( Observer ) i.next();
          o.update( this, o );
    }
    }променя се цената на акция, обаче това не става директно ясно, защото не даваме на метода параметър, нали? и все пак, как може да се промени цената и да се вкара в ъпдейт-метода?
и ъпдейта:
      public void update(Observable obj, Object arg) {
        if (arg instanceof String && obj.hasChanged()) {
            ???? (неизяснено–?)

          System.out.println("NameObserver: Name changed to" + );
         } else {
               System.out.println("NameObserver: Some other change to subject!");
              }
                
Ако може да ми обясните тези два метода и тяхната зависимост
    }
 


 
Това мнение е редактирано от sunnyface на 15.06.2008 21:38
---------------------------
Потребител от: 28.04.08 | Всички уроци от sunnyface | Всички скриптове от sunnyface

Dum Spiro, Spero!
напиши eMail напиши лично съобщение виж профила на sunnyface
Публикувано на: 17.06.2008 01:50
dokster
Ронин

Модератор

Мнения: (66)

На най-високо ниво идеята е следната. Нещо в главния клас се променя и той решава, че трябва да осведоми за това обзървърите. Главния клас си пази колекция с всички обзървъри и им извиква метода update() един по един. На update() се подава и обекта, който се е променил, защото един обзървър може да следи за промени в няколко обекта. Реда с въпросителните и на мен не ми е ясно защо е необходим.


 
---------------------------
Потребител от: 04.04.08 | Всички уроци от dokster | Всички скриптове от dokster

Just try me!
напиши eMail напиши лично съобщение виж профила на dokster
Публикувано на: 17.06.2008 16:18
napster
Император

Модератор

Мнения: (680)

Цитат от sunnyface@15.06.2008 21:29:
Търсих във форума, но не намерих теми или уроци свързани с тази интересна тема с интересни приложения.
не гарантирам, че инфото е 100% вярно, но понеже сега се занимавам с това(имам домашно очевидно, не е по свободна воля) реших да пусна малко полезна информация на фона на останалите теми в тон моля ви хора помогнете и т.н

Observer Patterns

Става въпрос за вид design pattern, който се използва са наблюдние на състоянието на обект или програма. Намира приложения при програми, където се имплементират Threads или Events.

В общи линии става въпрос за връзката между един клас(във Википедия го наричат Субект), който искаме да наблюдаваме(Главен клас) и отделните класове Наблюдатели(които очевидно го наблюдават).
Наблюдателите са зависими от промените в главния клас.

земи да прочетеш нещо!
Може после и това.
И накрая да зпълним празното място - цък.

Поздрави!


 
---------------------------
Потребител от: 25.02.08 | Всички уроци от napster | Всички скриптове от napster

Шизофрения е когато в един форум общуваш
сам със себе си под три различни ника!!!
http://www.hidrostroitel.com




напиши eMail напиши лично съобщение виж профила на napster
Публикувано на: 17.06.2008 17:50
sunnyface
Чирак

Мнения: (8)

Идеята я схващам много добре, имплементирането обаче е друго нещо.
@ dokster трябва ли според теб класовете на наблюдатели и наблчдаващи да се имплементирани като Threads, аз видях в интернет примери и по двата начина, кога трябва и кога не? Мерси предварително

@napster ако си беше направил труда да прочетеш цялото ми мнение, щеше да видиш че информацията в него е взета точно от сайта, който си ми дал(и то английската му версия, която е по-пълна) като "полезен линк".Айде със здраве


 
Това мнение е редактирано от sunnyface на 17.06.2008 17:51
---------------------------
Потребител от: 28.04.08 | Всички уроци от sunnyface | Всички скриптове от sunnyface

Dum Spiro, Spero!
напиши eMail напиши лично съобщение виж профила на sunnyface
Публикувано на: 17.06.2008 18:08
dokster
Ронин

Модератор

Мнения: (66)

Не, не трябва. Обзървър патерна може спокойно да се реализира и без имплементиране на Thread. Трябва да се използват нишки, когато главните класова са заети с някаква блокираща дейност, от типа на слушане на порт.


 
---------------------------
Потребител от: 04.04.08 | Всички уроци от dokster | Всички скриптове от dokster

Just try me!
напиши eMail напиши лично съобщение виж профила на dokster
 1 посетител чете тази тема (0 потребители и 1 гост)  
Активни потребители: ---
   





IT-PLACE.NET © 2004 - 2008