Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
RAFA91
Заблокирован
1

Observer и Observable

03.08.2016, 12:14. Просмотров 670. Ответов 12
Метки нет (Все метки)

Есть код с применением Observer и Observable

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.*;
import java.lang.*;
 
 
 
class Watcher implements Observer // наблюдатель
{
    public void update(Observable obj, Object arg)
    {
         System.out.println("************ Hello, World! ************ " + obj + " " + this);
    }
}
 
class BeingWatched extends Observable // Наблюдаемый
{
    void f()
    {
        System.out.println("f: " + this);
        
        setChanged();
        notifyObservers();
        
        System.out.println("))))))))))))))))))))))))))))");
    }
}
 
 
class Rextester
{  
    public static void main(String args[])
    {
       BeingWatched Observed = new BeingWatched();
       Watcher Observing = new Watcher();
        System.out.println("Observed = " + Observed + " Observing = " + Observing);
        Observed.addObserver(Observing);
        Observed.f();
    }
}
зачем все это если можно и так написать.....


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.*;
import java.lang.*;
 
 
 
class Watcher  // наблюдатель
{
    public void update(Object obj, Object arg)
    {
         System.out.println("************ Hello, World! ************ " + obj + " " + this);
    }
}
 
class BeingWatched  // Наблюдаемый
{
    private Watcher Observing;
    public BeingWatched(Watcher Observing) {this.Observing = Observing;}
    void f()
    {
        System.out.println("f: " + this);
        
        Observing.update(this,null);
        
        System.out.println("))))))))))))))))))))))))))))");
    }
}
 
 
class Rextester
{  
    public static void main(String args[])
    {
       
       Watcher Observing = new Watcher();
        BeingWatched Observed = new BeingWatched(Observing);
        System.out.println("Observed = " + Observed + " Observing = " + Observing);
        
        Observed.f();
    }
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2016, 12:14
Ответы с готовыми решениями:

IntentService -> Singleton Observable <-> Activity Observer можно ли?
Вобщем у меня есть IntentService, который получает данные, отправляет в синглтон и вырубается, до...

RxJava Observable.from из BroadcastReceiver
Здравствуйте. Недавно начал внедрять rxJava и столкнулся со сложностью: Есть BroadcastReceiver...

Сохранение данных Observable Collection в таблицу
Собственно вопрос как!? Есть коллекция с 10 элементами, необходимо сохранить файл с таблицей где...

паттерн Observer
Гуру программирования, просветите по данному сабжу (расскажите человеческим языком/направьте...

12
KEKCoGEN
Эксперт Java
2296 / 2135 / 546
Регистрация: 28.12.2010
Сообщений: 8,402
03.08.2016, 13:43 2
RAFA91, таким образом достигается меньшая связанность объектов. В больших системах, чем меньше связанны объекты, тем лучше т.к в случае чего, надо делать меньше изменений.
0
RAFA91
Заблокирован
03.08.2016, 13:45  [ТС] 3
вы не поняли


Цитата Сообщение от RAFA91 Посмотреть сообщение
зачем все это если можно и так написать.....
0
Usaga
Эксперт .NET
6962 / 4844 / 831
Регистрация: 21.01.2016
Сообщений: 18,660
Завершенные тесты: 2
03.08.2016, 14:01 4
RAFA91, первый вариант позволяет динамически, на ходу, изменять количество подписчиков, которые могут быть разного типа, лишь бы реализовывали интерфейс Observer.

Второй же вариант всё ко всему прибивает гвоздями: только один подписчик, только одного конкретного типа, и поменять его во время жизни BeingWatched уже нельзя.

Разница довольно ощутимая.
0
RAFA91
Заблокирован
03.08.2016, 14:07  [ТС] 5
почему сначала извещается Watcher_2 а потом Watcher_1

про стек басни пожалуйста не надо


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.*;
import java.lang.*;
 
 
 
class Watcher_1 implements Observer // наблюдатель
{
    public void update(Observable obj, Object arg)
    {
         System.out.println("************ Watcher_1 ************ " + obj + " " + this);
    }
}
 
class Watcher_2 implements Observer // наблюдатель
{
    public void update(Observable obj, Object arg)
    {
         System.out.println("************ Watcher_2 ************ " + obj + " " + this);
    }
}
 
class BeingWatched extends Observable // Наблюдаемый
{
    void f()
    {
        System.out.println("f: " + this);
        
        setChanged();
        notifyObservers();
        
        System.out.println("))))))))))))))))))))))))))))");
    }
}
 
 
class Rextester
{  
    public static void main(String args[])
    {
       BeingWatched Observed = new BeingWatched();
       Watcher_1 Observing_1 = new Watcher_1();
        Watcher_2 Observing_2 = new Watcher_2();
        System.out.println("Observed = " + Observed + " Observing = " + Observing_1 + " " + Observing_2);
         Observed.addObserver(Observing_1);
        Observed.addObserver(Observing_2);
    
        Observed.f();
    }
}
0
Usaga
Эксперт .NET
6962 / 4844 / 831
Регистрация: 21.01.2016
Сообщений: 18,660
Завершенные тесты: 2
03.08.2016, 14:17 6
RAFA91, реализация интерфейса Observable остаётся на совести каждого конкретного класса его реализующего. В данном случае может быть и стёк, но вряд ли. Просто так алгоритм реализовали.

Добавлено через 3 минуты
Я прогнал, Observable - это класс)) Но в документации не сказано, почему порядок извещение обратный. Да это, в общем-то и не принципиально.
0
RAFA91
Заблокирован
03.08.2016, 14:30  [ТС] 7
может кто-то приведет пример использования clearChanged() и что значит не изменяющийся обобьет
0
Usaga
Эксперт .NET
6962 / 4844 / 831
Регистрация: 21.01.2016
Сообщений: 18,660
Завершенные тесты: 2
03.08.2016, 14:43 8
RAFA91, метод clearChanged() просто сбрасывает признак того, что объект был изменён (hasChanged).
0
RAFA91
Заблокирован
03.08.2016, 14:46  [ТС] 9
вот признак того что обьект изменен

Java
1
2
 setChanged();
        notifyObservers();
0
Usaga
Эксперт .NET
6962 / 4844 / 831
Регистрация: 21.01.2016
Сообщений: 18,660
Завершенные тесты: 2
03.08.2016, 15:55 10
RAFA91, признак - внутренний флаг, который устанавливается методом setChanged() и сбрасывается clearChanged() и notifyObservers(). Обо всё написано в доке.
0
RAFA91
Заблокирован
03.08.2016, 16:22  [ТС] 11
клонишь к тому что так надо

Java
1
2
clearChanged();
        notifyObservers();
чтобы не вызывалось update

ты же забыл что она протектед.
0
Usaga
Эксперт .NET
6962 / 4844 / 831
Регистрация: 21.01.2016
Сообщений: 18,660
Завершенные тесты: 2
03.08.2016, 16:28 12
Я ни к чему не клоню. Я вообще вопроса не вижу
0
RAFA91
Заблокирован
03.08.2016, 16:30  [ТС] 13
так я и спросил на конкретном примере показать можешь применение clearChanged(); можешь на моем коде.

описание я смогу прочитать и в шилде но без примера увы.
0
03.08.2016, 16:30
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2016, 16:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Property 'map' does not exist on type 'Observable<Response>'.ts(2339)
Все делаю по мануалу, но там ошибок не выдает у парня) а у меня выдает: import...

Отслеживание DOM (observer)
Добрый день. У меня есть див &quot;custom-row&quot; в котором находится кнопка с классом &quot;btn-more&quot; при...

паттерн наблюдатель (observer)
Помогите разобраться. Нашел в интернете несколько примеров но по ним я не могу понять как они...

Паттерн наблюдателя ( Observer )
Доброго времени суток, прошу помочь с моим заданием. Есть хранилище объектов и элемент TreeView....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.