Я новичок в Java и изучаю концепцию шаблонов Observer.Я могу успешно создавать и использовать Observer и Observable, но не знаю, как отменить регистрацию Observers.Пожалуйста, найдите код ниже.
У меня есть класс RandomGenerator, который генерирует случайное число от 0 до 10.Этот класс расширяет Observable. У меня есть класс Subsriber, который расширяет Observer, и он хочет «слушать» RandomGenerator и специально искать числа больше 5. В моем основном методе я создаю экземпляр объекта RandomGenerator и 2 объектов Subscriber, которые регистрируются в RandomGenerator.Объекты подписчика уведомляются с номерами> 5, но я не понимаю, как отменить регистрацию одного из объектов подписчика и повторно протестировать шаблон наблюдателя
public class RandomGenerator extends Observable{
public int num;
public void generateNums() {
for(int ii=0; ii<10; ii++) {
num = (int) (Math.random() * 10);
if(num >= 5) {
setChanged();
notifyObservers();
}
else {
System.out.println("less than 5"+num);
}
}
}
}
// Subscriber
public class Subscriber implements Observer{
RandomGenerator observable;
public Subscriber(RandomGenerator observable)
{
this.observable = observable;
observable.addObserver(this);
}
@Override
public void update(Observable obj, Object arg) {
if(obj instanceof RandomGenerator) {
RandomGenerator gen = (RandomGenerator)obj;
System.out.println(gen.num);
}
}
}
//Main method
public class Invoker {
public static void main(String[] args) {
RandomGenerator gen = new RandomGenerator();
Subscriber ss1 = new Subscriber(gen);
Subscriber ss2 = new Subscriber(gen);
gen.generateNums();
// how to de-register ss1 and call gen.generateNums();
}
}