Понимание шаблона Observer

#java #language-agnostic #observer-pattern

#java #язык не зависит #наблюдатель-шаблон

Вопрос:

Я создал небольшое приложение, в котором есть JSlider, который управляет скоростью объекта. Когда ползунок обнаруживает изменение в своем состоянии, скорость объекта изменяется соответствующим образом. Мне было интересно, использовало ли то, что я создал, шаблон Observer. Википедия утверждает, что шаблон Observer «- это шаблон проектирования программного обеспечения, в котором объект, называемый субъектом, поддерживает список своих зависимых элементов, называемых наблюдателями, и автоматически уведомляет их о любых изменениях состояния, обычно путем вызова одного из их методов. В основном используется для реализации распределенных систем обработки событий «. В моем коде всякий раз, когда обнаруживается изменение в JSlider, автоматически выполняется небольшой фрагмент кода для изменения скорости объекта с помощью:

 slider.addChangeListener(
            new ChangeListener(){
                public void stateChanged(ChangeEvent e){
                    horizSpeed = slider.getValue();
                    sliderTitle.setText("Current Speed: "   horizSpeed);
                }
            }
    );
  

Я не думаю, что он поддерживает список иждивенцев, как того требует Википедия, но я не уверен. Если бы кто-нибудь мог просветить меня о тонкостях шаблона Observer, я был бы очень признателен. Спасибо!

Комментарии:

1. Это slider который имеет список зависимых элементов. Вы добавили только один элемент.

Ответ №1:

Observer также известен как publish-subscribe. Это имя может быть немного более пояснительным.

У вас есть наблюдатель, в настоящее время имеющий только одного зарегистрированного клиента. Однако addChangeListener может зарегистрировать более одного прослушивателя. Представьте, что вы хотели бы изменить цвет ползунка, когда он был на верхнем уровне. Вы хотели бы отделить это от изменения скорости.

Ответ №2:

Slider является субъектом и addChangeListener добавляет иждивенца в свой список иждивенцев. Это классический пример шаблона observer.