2017-04-14 14 views
1

私は、2つの異なるoberserversで究明したい2つの属性を持つproductオブジェクトを得ました。しかし、1つの属性だけを変更すると、他の属性オブザーバから変更が加えられたという通知も受け取ります。本当に変更されたときにのみ通知を受けるようにするにはどうすればよいですか?2つの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

観察可能なクラスを変更すると、登録されているオブザーバークラスがすべて通知されます。 notifyObserversメソッドの引数を使用して、変更を識別し、オブザーバオブジェクトを1つだけ作成できます。

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); 
    } 
} 
0

はい、私が最初に考えたことはありますが、私は2人のオブザーバーとそれを行うことになっています。私はそれを解決する方法を全く考えていません..

関連する問題