> Java > java지도 시간 > 본문

Java에서 관찰 가능

WBOY
풀어 주다: 2024-08-30 15:14:47
원래의
564명이 탐색했습니다.

Observable은 프로그램의 다른 섹션이 관찰할 수 있는 하위 클래스를 구성할 수 있는 Java 프로그래밍 언어의 클래스입니다. 관찰 클래스는 이 서브클래스의 객체가 변경되면 알림을 받습니다. 관찰자에게 변경 사항이 통보되면 update() 메서드가 호출됩니다. Observable 클래스는 java.util 패키지에서 사용할 수 있습니다. 클래스의 하위 클래스는 애플리케이션이 관찰해야 하는 객체를 설명하는 데 사용될 수 있으며, 관찰 가능한 객체에 하나 이상의 관찰자가 있을 수도 있습니다. 관찰 클래스는 관찰 클래스가 구현해야 하는 update() 메서드를 지정하는 Observer 인터페이스를 구현해야 합니다.

광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사

관찰 대상은 두 가지 기본 규칙을 준수해야 합니다.

  • 먼저 변경된 경우 setChanged() 메서드를 호출해야 합니다.
  • 관찰자에게 업데이트를 알릴 준비가 되면 informObservers() 메서드를 호출해야 합니다. 그 결과 관찰 객체의 update() 메소드가 호출됩니다.

update() 전에 관찰된 객체는 setChanged() 및 informObservers() 메서드를 모두 호출해야 합니다.

Java의 Observable 구문

Observable 클래스 선언

java.util.Observable 클래스 선언은 다음과 같습니다.

public class Observable extends Object
로그인 후 복사

관찰 가능 클래스 생성자

아래는 관찰 가능한 클래스의 생성자입니다.

  • Observable(): 이는 관찰자가 없는 Observable을 생성합니다.

관찰 가능한 클래스의 방법

Observable 클래스의 메서드는 다음과 같습니다.

  • void addObserver(Observer o): 이 메소드는 이미 존재하는 것과 동일하지 않은 한 해당 객체에 대한 관찰자 컬렉션에 새로운 관찰자를 생성합니다.
  • protected voidclearChanged(): 이 메소드는 이 객체가 변경되지 않았거나 모든 관찰자에게 이미 최신 업데이트를 알렸음을 의미합니다. 이 경우 hasChanged() 메소드는 false를 반환합니다. .
  • int countObservers(): 이 Observable 객체에 대한 관찰자 수는 이 메소드에 의해 반환됩니다.
  • void deleteObserver(Observer o): 이 메소드는 이 객체의 관찰자 목록에서 관찰자를 제거합니다.
  • void deleteObservers(): 이 메소드는 관찰자 목록을 지워 이 객체에서 모든 관찰자를 제거합니다.
  • boolean hasChanged(): 이 메소드는 이 객체가 수정되었는지 여부를 결정합니다.
  • void informObservers(): hasChanged() 메소드가 이 객체가 변경되었음을 나타내는 경우 모든 관찰자에게 경고한 다음 ClearChanged( ) 메소드를 호출하여 객체가 변경되지 않았음을 표시합니다. update() 메소드에는 두 번째 매개변수로 null이 전달됩니다.
  • void informObservers(Object arg): hasChanged() 메서드가 이 개체가 변경되었음을 나타내는 경우 모든 관찰자에게 경고한 다음 ClearChanged() 메서드를 호출하여 개체가 변경되지 않았음을 표시합니다. update() 메소드에는 두 번째 매개변수로 객체가 전달됩니다.
  • protected void setChanged(): 이는 Observable 객체가 수정되었음을 나타내며 hasChanged() 메서드는 이제 true를 반환합니다.

Java에서 Observable 작업

프로그램 내에서 관찰 대상과 관찰자 간의 상호 작용은 일반적으로 다음과 같은 일련의 이벤트 형식을 취합니다.

  • 공개 접근 방식이 비공개 데이터를 수정하면 내부 상태가 변경되고, setChanged() 메서드를 호출하여 모델의 상태가 변경되었음을 표시합니다. 그런 다음 informObservers()를 호출하여 관찰자에게 무언가 변경되었음을 알립니다. informObservers()에 대한 호출은 별도 스레드의 업데이트 루프 등 어디에서나 이루어질 수 있습니다.
  • 다음으로 각 관찰자의 update() 메서드가 호출되어 상태 업데이트가 발생했음을 나타냅니다.

Java의 Observable 예제

아래는 Java Observable의 예입니다.

예시 #1

setChanged() 메소드 유무에 관계없이 변경을 수행하기 위한 Java의 Observable의 예

코드:

import java.util.*;
// This is the observer class
class ObserverEx implements Observer
{
public void update(Observable obj, Object arg)
{
System.out.println("Update in an observer side.");
}
}
// This is the obsrvable class
class ObservableEx extends Observable
{
void change_with_setChanged()
{
setChanged();
System.out.println("Change the status with setChanged : " + hasChanged());
notifyObservers();
}
void change_without_setChanged()
{
System.out.println("Change status with setChanged : " + hasChanged());
notifyObservers();
}
}
public class HelloWorld {
public static void main(String args[])
{
ObservableEx Observable = new ObservableEx();
ObserverEx observer1 = new ObserverEx();
ObserverEx observer2 = new ObserverEx();
Observable.addObserver(observer1);
Observable.addObserver(observer2);
Observable.change_with_setChanged();
Observable.change_without_setChanged();
int no = Observable.countObservers();
System.out.println("The number of observers for this Observable are : " + no);
}
}
로그인 후 복사

출력:

Java에서 관찰 가능

위 프로그램과 마찬가지로 Observable 클래스를 확장하여 Observable 사용자 정의 클래스 ObservableEx를 생성하고, 업데이트 구현을 제공하는 클래스인 Observer 인터페이스를 구현하여 Observer 사용자 정의 클래스 ObserverEx를 생성합니다( ) 방법. 다음으로, ObservableEx 클래스에는 두 가지 메서드인change_with_setChanged()와change_without_setChanged()가 포함되어 있습니다.

The method change_with_setChanged() call the setChanged() and then notify all the observer, which means the changes done here with setChanged will be notified to all the observer.Whereas the method change_without_setChanged() does not call the setChanged() and notify all the observers, which means the changes done here without setChanged will not show to all the observer.

Then, in the main function, one Observable and two Observer objects are created, and also add both the Observer object to this Observable. Next, on Observer objects, the change_with_setChanged() method is called, which notifies both the observers and called the update() method, which prints the message, whereas the change_without_setChanged() method does not call the update() method of the observers. And next finding and printing the number of observers, as we can see in the above output.

Example #2

Example for Observable in Java to perform changes with or without clearChanged() method.

Code:

import java.util.*;
// This is the observer class
class ObserverEx implements Observer
{
public void update(Observable obj, Object arg)
{
System.out.println("Update in an observer side.");
} }
// This is the obsrvable class
class ObservableEx extends Observable
{
void change_with_clearChanged()
{
setChanged();
System.out.println("Removes all the changes made by setChanged method.");
// clearChanged method
clearChanged();
notifyObservers();
}
void change_without_clearChanged()
{
setChanged();
System.out.println("Does not removes all the changes made by setChanged method. ");
notifyObservers();
}
}
public class HelloWorld {
public static void main(String args[])
{
ObservableEx Observable = new ObservableEx();
ObserverEx observer1 = new ObserverEx();
ObserverEx observer2 = new ObserverEx();
Observable.addObserver(observer1);
Observable.addObserver(observer2);
Observable.change_with_clearChanged();
Observable.change_without_clearChanged();
int no = Observable.countObservers();
System.out.println("The number of observers for this Observable are : " + no);
Observable.deleteObserver(observer2);
no = Observable.countObservers();
System.out.println("The number of observers after delete for this Observable are : " + no);
}
}
로그인 후 복사

Output:

Java에서 관찰 가능

As in the above program, the classes ObservableEx and ObserverEx are created. Next, the class ObservableEx contains two methods change_with_clearChanged() and change_without_clearChanged(). The method change_with_clearChanged() call the setChanged(), clearChanged() which removes all the changes made by setChanged method. Whereas the method change_without_clearChanged() does not call the clearChanged() which means the changes made by setChanged method will not remove.

Then, in the main function, one Observable and two Observer objects are created, and also add both the Observer object to this Observable. Next, on Observer objects, the change_with_clearChanged() method is called, which does not call the update() method of the observers, whereas the change_without_setChanged() method calls the update() method of the observers. And next, delete the observer1 and finding reaming Observer and printing, as we can see in the above output.

Conclusion

The Observable class is available in java.util package. An Observable is a class in Java that allows the creation of an Observable subclass that other sections of the program can observe.

위 내용은 Java에서 관찰 가능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!