Исходный URL-адрес: Серия шаблонов проектирования Java — Метод написания шаблонов Observer 2: Блог JDK_IT — Блог CSDN
Введение
иллюстрировать
В этой статье используется пример, чтобы представить способ написания шаблона наблюдателя: JDK.
Введение в шаблон JDK Observer
В Java класс java.util.Observable и интерфейс java.util.Observer определяют шаблон наблюдателя, пока эти два интерфейса реализованы, шаблон наблюдателя может быть написан.
1. Наблюдаемый
Класс Observable является абстрактным целевым классом (наблюдаемым). Он имеет переменную-член коллекции Vector для сохранения всех объектов-наблюдателей, которые будут уведомлены. Давайте представим его три наиболее важных метода.
- Метод void addObserver(Observer o): используется для добавления нового объекта-наблюдателя в коллекцию.
- Метод void notifyObservers(Object arg): вызовите метод обновления всех объектов-наблюдателей в коллекции, чтобы уведомить их об изменениях данных. Обычно наблюдатели, присоединившиеся к набору позже, уведомляются раньше.
- Метод void setChange(): используется для установки внутреннего флага логического типа, указывающего, что целевой объект изменился. notifyObservers() будет уведомлять наблюдателей только тогда, когда это правда.
2. Наблюдатель
Интерфейс Observer — это абстрактный наблюдатель, который отслеживает изменения в целевом объекте.Когда целевой объект изменяется, наблюдатель уведомляется и вызывает метод обновления для выполнения соответствующей работы.
пример
Здесь используется случай, близкий к реальной сцене: когда заказ отменяется, должна быть серия операций, таких как: бизнес-аккаунт должен вернуть деньги пользователю, а бизнес-инвентарь должен вернуть количество товара.
В этом сценарии заказ на отмену является наблюдаемым объектом, а бизнес по учетным записям и бизнес по запасам — наблюдателями.
структура проекта
класс бизнес-данных
При отмене заказа субъект передаст эти данные заинтересованным наблюдателям.
package com.knife.designPattern.jdk.bo;
import lombok.Data;
@Data
public class CancelOrderBO {
private String orderNo;
}
тема
package com.knife.designPattern.jdk.subject;
import com.knife.designPattern.jdk.bo.CancelOrderBO;
import java.util.Observable;
public class CancelOrderSubject extends Observable {
public void process(CancelOrderBO cancelOrderBO) {
super.setChanged(); //changed = true
super.notifyObservers(cancelOrderBO);
}
}
наблюдатель
Аккаунт Business Observer
Для простоты обслуживания эта статья была перенесена на этот веб-сайт: Написание шаблона Java Observer 2: JDK — мастер самостоятельного изучения