Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452

Observer и Observable

03.08.2016, 12:14. Показов 1247. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.08.2016, 12:14
Ответы с готовыми решениями:

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

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

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

12
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.08.2016, 13:43
RAFA91, таким образом достигается меньшая связанность объектов. В больших системах, чем меньше связанны объекты, тем лучше т.к в случае чего, надо делать меньше изменений.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
03.08.2016, 13:45  [ТС]
вы не поняли


Цитата Сообщение от RAFA91 Посмотреть сообщение
зачем все это если можно и так написать.....
0
Эксперт .NET
 Аватар для Usaga
14138 / 9362 / 1350
Регистрация: 21.01.2016
Сообщений: 35,201
03.08.2016, 14:01
RAFA91, первый вариант позволяет динамически, на ходу, изменять количество подписчиков, которые могут быть разного типа, лишь бы реализовывали интерфейс Observer.

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

Разница довольно ощутимая.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
03.08.2016, 14:07  [ТС]
почему сначала извещается 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
Эксперт .NET
 Аватар для Usaga
14138 / 9362 / 1350
Регистрация: 21.01.2016
Сообщений: 35,201
03.08.2016, 14:17
RAFA91, реализация интерфейса Observable остаётся на совести каждого конкретного класса его реализующего. В данном случае может быть и стёк, но вряд ли. Просто так алгоритм реализовали.

Добавлено через 3 минуты
Я прогнал, Observable - это класс)) Но в документации не сказано, почему порядок извещение обратный. Да это, в общем-то и не принципиально.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
03.08.2016, 14:30  [ТС]
может кто-то приведет пример использования clearChanged() и что значит не изменяющийся обобьет
0
Эксперт .NET
 Аватар для Usaga
14138 / 9362 / 1350
Регистрация: 21.01.2016
Сообщений: 35,201
03.08.2016, 14:43
RAFA91, метод clearChanged() просто сбрасывает признак того, что объект был изменён (hasChanged).
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
03.08.2016, 14:46  [ТС]
вот признак того что обьект изменен

Java
1
2
 setChanged();
        notifyObservers();
0
Эксперт .NET
 Аватар для Usaga
14138 / 9362 / 1350
Регистрация: 21.01.2016
Сообщений: 35,201
03.08.2016, 15:55
RAFA91, признак - внутренний флаг, который устанавливается методом setChanged() и сбрасывается clearChanged() и notifyObservers(). Обо всё написано в доке.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
03.08.2016, 16:22  [ТС]
клонишь к тому что так надо

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

ты же забыл что она протектед.
0
Эксперт .NET
 Аватар для Usaga
14138 / 9362 / 1350
Регистрация: 21.01.2016
Сообщений: 35,201
03.08.2016, 16:28
Я ни к чему не клоню. Я вообще вопроса не вижу
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
03.08.2016, 16:30  [ТС]
так я и спросил на конкретном примере показать можешь применение clearChanged(); можешь на моем коде.

описание я смогу прочитать и в шилде но без примера увы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.08.2016, 16:30
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru