无法从 Observable 注销
Unable to de-register from Observable
我是 java 的新手,正在学习观察者模式概念。我能够成功创建和使用 Observer 和 Observable,但不确定如何注销 Observers。请在下面找到代码。
我有一个 RandomGenerator class 可以生成 0-10 之间的随机数。这个 class extends Observable 我有一个 Subsriber class 扩展了 Observer,它想 "listen" 到 RandomGenerator 并专门寻找大于 5 的数字。在我的主要方法中,我正在实例化 RandomGenerator 对象和2 将自己注册到 RandomGenerator 的订阅者对象。
Subsriber 对象收到大于 5 的通知,但我不知道如何注销其中一个 Subscriber 对象并重新测试观察者模式
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();
}
}
将以下方法添加到 Subscriber。
public void disconnect() {
observable.deleteObserver(this);
}
供参考:https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Observable.html
我是 java 的新手,正在学习观察者模式概念。我能够成功创建和使用 Observer 和 Observable,但不确定如何注销 Observers。请在下面找到代码。
我有一个 RandomGenerator class 可以生成 0-10 之间的随机数。这个 class extends Observable 我有一个 Subsriber class 扩展了 Observer,它想 "listen" 到 RandomGenerator 并专门寻找大于 5 的数字。在我的主要方法中,我正在实例化 RandomGenerator 对象和2 将自己注册到 RandomGenerator 的订阅者对象。 Subsriber 对象收到大于 5 的通知,但我不知道如何注销其中一个 Subscriber 对象并重新测试观察者模式
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();
}
}
将以下方法添加到 Subscriber。
public void disconnect() {
observable.deleteObserver(this);
}
供参考:https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Observable.html