관찰자 모드 Observer 의 예
3202 단어 자바
대상 의 내부 상태 가 바 뀌 었 을 때 외부 대상 에 게 자동 으로 응답 을 알 립 니 다.
2.Observer 모드 의 구성:
·피 관찰자:내부 상태 가 바 뀔 수 있 고 외부 대상 에 게 알려 야 합 니 다.
·관찰자:내부 상태의 변화 에 호응 해 야 할 대상
3.Observer 모드 의 자바 구현:
자바 의 API 에 서 는 Observer 모드 의 실현 을 제공 합 니 다.구체 적 으로 자바 util.Observable 류 와 자바 util.Observer 인터페이스 로 이 루어 집 니 다.
전 자 는 두 가지 중요 한 방법 이 있다.
·setChanged:내부 상 태 를 변 경 된 상태 로 설정
·notifyObserver(Object obj):관찰자 에 게 발생 하 는 변 화 를 알 리 고 인자 obj 는 변 경 된 정보 입 니 다.
후 자 는 핵심 적 인 방법 이 있다.
·update(Object obj):피 관찰자 의 변화 에 따라 obj 는 피 관찰자 가 전달 하 는 정보 입 니 다.이 방법 은 notify Observer 가 호출 될 때 자동 으로 호출 됩 니 다.
다음은 Observer 모드 의 실현 과정 입 니 다.
·피 관찰 자 를 만 들 고 자바 util.Observable 을 계승 합 니 다.
·자바 util.Observer 인 터 페 이 스 를 실현 하 는 관찰 자 를 만 듭 니 다.
· 등록 관찰,addObserver(Observer observer)호출
·피 관찰자 가 대상 내부 상 태 를 바 꾸 는 곳 에서 set Changed()방법 을 호출 한 다음 notify Observer(Object)방법 을 호출 하여 피 관찰자 에 게 알 립 니 다.
·관찰자 의 update(Object)방법 에서 변경 사항 에 응답 합 니 다.
4.Observer 모드 의 장점:
1.Observer 모드 의 장점:
·피 관찰 자 는 누가 그것 을 관찰 하고 있 는 지 만 알 고 구체 적 인 관찰 세부 사항 을 알 필요 가 없다.
·피 관찰자 가 변 하면 방송 을 통 해 관찰자 에 게 만 알 리 고 소식 이 어떻게 도착 하 는 지 는 알 필요 가 없다.이렇게 되면 피 관찰자 와 관찰자 간 의 통신 하 드 코딩 을 없 앨 수 밖 에 없다.
·피 관찰자 가 동시에 여러 개의 관찰 을 받 을 때 관찰 자 는 자신 이 관심 이 있 는 사건 만 선택 하고 다른 사건 을 무시 할 수 있다.
·여러 관찰자 가 조합 하면 하나의 관찰 체인 을 형성 할 수 있다.만약 에 여러 개의 조작 이 필요 하 다 면 이때 관찰 체인 은 역할 을 발휘 할 수 있다.
·관찰 자 는 피 관찰 대상 의 변화 에 실시 간 으로 응답 할 수 있다.예 를 들 어 자동 경고,운행 중단 등 이다.
2.Observer 모드 를 사용 하면
·스 레 드 간 의 통신 체 제 를 차단 합 니 다.예 를 들 어 두 스 레 드 사이 에 메 인 스 레 드 는 관찰자 가 될 수 있 고 실행 스 레 드 는 피 관찰자 입 니 다.서로 간 에는 상대방 의 존재 만 알 고 있 을 뿐 통신 의 세부 사항 은 모른다.
·하 드 인 코딩 제거:Observer 모드 가 없 으 면 리 셋 모드 를 사용 하거나 코드 에 관찰 자 를 표시 할 수 있 습 니 다.
·이상 메커니즘 최적화:이상 발생 시 최상 위 모니터링 에 특히 적합 하고 try-catch 코드 량 감소
다음은 하나의 예 이다.
import java.util.*;
public class product extends Observable{
private float price;////
public float getPrice(){ return price;}
public void setPrice(float price){
this.price=price;
setChanged(); ////
notifyObservers(new Float(price));
}
}
다음은 관찰자:
import java.util.*;
public class PriceObserver implements Observer{
private float price=0;
public void update(Observable obj,Object arg){
if (arg instanceof Float){
price=((Float)arg).floatValue();
System.out.println("PriceObserver :price changet to "+price);
}
}
}
다음은 테스트 클래스:
public class Test {
public static void main(String args[]){
Product product=new Product();
PriceObserver priceobs=new PriceObserver();
////
product.addObserver(priceobs);
product.setPrice(9.22f);
}
}
실행 결과:
C:\java>java TestPriceObserver :price changet to 9.22
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.