我得到了一个具有两个属性的产品对象,我想用两个不同的oberservers来观察。但是,如果我只改变一个属性,我也会从另一个属性观察者那里收到一条通知,告知它已被更改。我怎样才能确保只在真正改变时收到通知?
import java.util.Observable;
public class Product extends Observable {
private String name;
private double price;
public void setName(String n){
name = n;
this.setChanged ();
this.notifyObservers();
}
public void setPrice(double p){
price = p;
this.setChanged ();
this.notifyObservers();
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
}
public class ObserverDemo {
public static void main(String [] args) throws Exception {
Product p1 = new Product();
p1.addObserver((obj, arg) -> System.out.println("Name was changed to: " + ((Product) obj).getName()+"\n"));
p1.addObserver((ob, arg) -> System.out.println("Price was changed to: " + ((Product) ob).getPrice()+"\n"));
p1.setPrice(1.95);
p1.setName("Milk");
p1.setName("Banana");
p1.setPrice(0.95);
}
}
答案 0 :(得分:0)
可观察类的任何更改都将通知所有已注册的观察者类。您可以使用notifyObservers方法中的参数来标识更改并仅创建一个观察者对象。
import java.util.Observable;
public class Product extends Observable {
private String name;
private double price;
public void setName(String n){
name = n;
this.setChanged ();
this.notifyObservers("Name was changed to " + n + "\n");
}
public void setPrice(double p){
price = p;
this.setChanged ();
this.notifyObservers("Price was changed to " + p + "\n");
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
}
public class ObserverDemo {
public static void main(String [] args) throws Exception {
Product p1 = new Product();
p1.addObserver((obj, arg) -> System.out.println(arg));
p1.setPrice(1.95);
p1.setName("Milk");
p1.setName("Banana");
p1.setPrice(0.95);
}
}
答案 1 :(得分:0)
是的,这就是我首先想到的,但我应该与2名观察员一起做。我完全不知道如何解决这个问题。