Java . util . Java 中的可观察类
原文:https://www . geesforgeks . org/Java-util-observable-class-Java/
java.util.Observable 用于创建程序其他部分可以观察的子类。当这种子类的对象发生变化时,观察类会得到通知。当观察者被告知有变化时,调用 update( ) 方法。
Note:
观察类必须实现 观察者 界面,其中定义了 更新() 方法。
被观察的物体必须遵循两个简单的规则:
- 如果改变,必须调用 setChanged( ) 方法。
- 当它准备通知观察者这个变化时,它必须调用 notifyObservers( ) 方法。这导致调用观察对象中的更新()方法。
Be careful, if the object calls *notifyObservers( )* method without having previously called
*setChanged( )* method, no action will take place.
被观察对象必须同时调用 setChanged( ) 和 notifyObservers( ) 方法,才会调用 update( ) 。 Java . util . observatory 的构造函数:
- 可观测值() 用零观测值构造一个可观测值。
方法:
-
addObserver(Observer observer) : Adds observer to the list of objects observing the invoking object.
```java Syntax : public void addObserver(Observer observer) Exception : NullPointerException -> if the parameter observer is null
```
```java // Java code to demonstrate addObserver() method import java.util.*;
// This is the observer class Observer1 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer1 is added"); } }
// This is class being observed class BeingObserved extends Observable { void incre() { setChanged(); notifyObservers(); } }
class ObserverDemo { // Driver method of the program public static void main(String args[]) { BeingObserved beingObserved = new BeingObserved(); Observer1 observer1 = new Observer1(); beingObserved.addObserver(observer1); beingObserved.incre(); } } ```
输出:
java Observer1 is added
-
setChanged() : Called when the invoking object has changed.
```java Syntax : protected void setChanged( ) Exception : NA.
```
```java // Java code to demonstrate setChanged() method import java.util.*;
// This is first observer class Observer1 implements Observer { public void update(Observable obj, Object arg) { } }
// This is class being observed class BeingObserved extends Observable { void func1() { setChanged(); System.out.println("Change status with setChanged :" + hasChanged()); notifyObservers(); }
void func2() { System.out.println("Change status without setChanged :" + hasChanged()); notifyObservers(); } }
class ObserverDemo { // Driver method of the program public static void main(String args[]) { boolean status; BeingObserved beingObserved = new BeingObserved(); Observer1 observer1 = new Observer1(); beingObserved.addObserver(observer1); beingObserved.func1(); beingObserved.func2(); } } ```
输出:
java Change status with setChanged :true Change status without setChanged :false
-
clearChanged(): Indicates that this object has no longer changed, or that it has already notified all of its observers of its most recent change, so that the hasChanged( ) method will now return false.
```java Syntax : protected void clearChanged( ) Exception : NA
```
```java // Java code to demonstrate clearChanged() method import java.util.*;
// This is the observer class Observer1 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Inside Observer1"); } }
// This is the class being observed class BeingObserved extends Observable { void func1() { setChanged(); // clearChanged method removes all the changes made by setChanged method clearChanged(); notifyObservers();
} }
class ObserverDemo { // Driver method of the program public static void main(String args[]) { BeingObserved beingObserved = new BeingObserved(); Observer1 observer1 = new Observer1(); beingObserved.addObserver(observer1); beingObserved.func1(); } } ```
输出:
java No Output
没有得到输出,因为 clearChanged( ) 方法已经删除了所有的更改。
-
notifyObservers() : Notifies all observers of the invoking object that it has changed by calling update( ). A null is passed as the second argument to update( ).
```java Syntax : public void notifyObservers( ) Exception : NA
```
```java // Java code to demonstrate notifyObservers( ) method import java.util.*;
// This is first observer class Observer1 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer1 Notified"); } }
// This is second observer class Observer2 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer2 Notified"); } }
// This is class being observed class BeingObserved extends Observable { void func1() { setChanged(); /This method notifies the change to all the observers that are registered/ notifyObservers();
} }
class ObserverDemo { // Driver method of the program public static void main(String args[]) { BeingObserved beingObserved = new BeingObserved(); Observer1 observer1 = new Observer1(); Observer2 observer2 = new Observer2(); beingObserved.addObserver(observer1); beingObserved.addObserver(observer2); beingObserved.func1(); } } ```
输出:
java Observer2 Notified Observer1 Notified
-
notifyObservers(Object obj) : Notifies all observers of the invoking object that it has changed by calling update( ). obj is passed as an argument to update( ).
```java Syntax : public void notifyObservers(Object obj) Exception : NA
```
```java // Java code to demonstrate notifyObservers(Object obj) method import java.util.*;
// This is first observer class Observer1 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer1 Notified with value : " + ((Integer)arg).intValue()); } }
// This is second observer class Observer2 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer2 Notified with value : " + ((Integer)arg).intValue()); } }
// This is class being observed class BeingObserved extends Observable { void func1() { setChanged(); /This method notifies the change to all the observers that are registered and passes an object/ notifyObservers(new Integer(10));
} }
class ObserverDemo { // Driver method of the program public static void main(String args[]) { BeingObserved beingObserved = new BeingObserved(); Observer1 observer1 = new Observer1(); Observer2 observer2 = new Observer2(); beingObserved.addObserver(observer1); beingObserved.addObserver(observer2); beingObserved.func1(); } } ```
输出:
java Observer2 Notified with value : 10 Observer1 Notified with value : 10
-
countObservers( ) : Returns the number of objects observing the invoking object.
```java Syntax : public int countObservers( ) Returns : the number of observers of this object Exception : NA
```
```java // Java code to demonstrate countObservers() method import java.util.*;
// This is first observer class Observer1 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer1"); } }
// This is second observer class Observer2 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer2"); } }
// This is class being observed class BeingObserved extends Observable { void func1() { setChanged(); notifyObservers(); } }
class ObserverDemo { // Driver method of the program public static void main(String args[]) { BeingObserved beingObserved = new BeingObserved(); Observer1 observer1 = new Observer1(); Observer2 observer2 = new Observer2(); beingObserved.addObserver(observer1); beingObserved.addObserver(observer2); int count_observer = beingObserved.countObservers(); System.out.println("Number of observers is " + count_observer); beingObserved.func1(); } } ```
输出:
java Number of observers is 2 Observer2 Observer1
-
deleteObserver(Observer observer): Removes observer from the list of objects observing the invoking object. Passing null to this method will have no effect.
```java Syntax : public void deleteObserver(Observer observer) Exception : NA
```
```java // Java code to demonstrate deleteObserver(Observer observer) method import java.util.*;
// This is first observer class Observer1 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer1"); } }
// This is second observer class Observer2 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer2"); } }
// This is class being observed class BeingObserved extends Observable { void func1() { setChanged(); notifyObservers(); } }
class ObserverDemo { // Driver method of the program public static void main(String args[]) { int count_observer; BeingObserved beingObserved = new BeingObserved(); Observer1 observer1 = new Observer1(); Observer2 observer2 = new Observer2(); beingObserved.addObserver(observer1); beingObserved.addObserver(observer2);
count_observer = beingObserved.countObservers(); System.out.println("Number of observers before" + " calling deleteObserver(): " + count_observer); beingObserved.func1();
// Deleting observer1 beingObserved.deleteObserver(observer1); count_observer = beingObserved.countObservers(); System.out.println("No. of observers after"+ " calling deleteObserver(): " + count_observer); beingObserved.func1();
} } ```
输出:
java Number of observers before calling deleteObserver(): 2 Observer2 Observer1 No. of observers aftercalling deleteObserver(): 1 Observer2
-
deleteObservers() : Removes all observers for the invoking object.
```java Syntax : public void deleteObservers() Exception : NA
```
```java // Java code to demonstrate deleteObservers() method import java.util.*;
// This is first observer class Observer1 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer1"); } }
// This is second observer class Observer2 implements Observer { public void update(Observable obj, Object arg) { System.out.println("Observer2"); } }
// This is class being observed class BeingObserved extends Observable { void func1() { setChanged(); notifyObservers(new Integer(10)); } }
class ObserverDemo { // Driver method of the program public static void main(String args[]) { int count_observer; BeingObserved beingObserved = new BeingObserved(); Observer1 observer1 = new Observer1(); Observer2 observer2 = new Observer2(); beingObserved.addObserver(observer1); beingObserved.addObserver(observer2);
count_observer = beingObserved.countObservers(); System.out.println("Number of observers before" + " calling deleteObserver(): " + count_observer); beingObserved.func1();
// Deleting all observers beingObserved.deleteObservers(); count_observer = beingObserved.countObservers(); System.out.println("No. of observers after "+ "calling deleteObserver(): " + count_observer); beingObserved.func1();
} } ```
输出:
java Number of observers before calling deleteObserver(): 2 Observer2 Observer1 No. of observers after calling deleteObserver(): 0
参考:在 Java 中可见
本文由迪帕克丑汉供稿。如果你喜欢 GeeksforGeeks 并想投稿,你也可以使用contribute.geeksforgeeks.org写一篇文章或者把你的文章邮寄到 contribute@geeksforgeeks.org。看到你的文章出现在极客博客主页上,帮助其他极客。
如果你发现任何不正确的地方,或者你想分享更多关于上面讨论的话题的信息,请写评论。
版权属于:月萌API www.moonapi.com,转载请注明出处