인 스 턴 스 코드 설명 JAVA 관찰자 모드
소개 하 다.
의도:대상 간 의 다 중 의존 관 계 를 정의 합 니 다.대상 의 상태 가 바 뀌 었 을 때 모든 의존 대상 이 알림 을 받 고 자동 으로 업 데 이 트 됩 니 다.
주요 해결:한 대상 의 상태 가 다른 대상 에 게 알려 주 는 문 제 를 바 꾸 고 사용 하기 쉽 고 낮은 결합 을 고려 하여 고도 의 협력 을 확보 해 야 한다.
언제 사용 할 지:한 대상(대상)의 상태 가 바 뀌 면 모든 의존 대상(관찰자 대상)이 통 지 를 받 고 방송 통 지 를 받 습 니 다.
어떻게 해결 할 것 인가:대상 을 대상 으로 하 는 기술 을 사용 하면 이런 의존 관 계 를 약화 시 킬 수 있다.
핵심 코드:추상 류 에 Array List 가 관찰자 들 을 저장 합 니 다.
인 스 턴 스 적용:
1.경매 할 때 경매 사 는 최고 가격 을 관찰 한 후에 다른 경매 자 에 게 가격 경쟁 을 통지 합 니 다.
2.서유기 에서 오 공 은 보살 에 게 붉 은 아 이 를 굴복 시 켜 달라 고 부탁 했다.보살 이 바닥 에 물 을 뿌 려 늙 은 거북 이 를 불 러 왔 다.이 거북 이 는 바로 관찰자 이다.그 는 보살 이 물 을 뿌리 는 동작 을 관찰 했다.
장점:
1.관찰자 와 피 관찰 자 는 추상 적 인 결합 이다.
2.트리거 메커니즘 을 구축한다.
단점:
1.피 관찰자 대상 에 직접적 이 고 간접 적 인 관찰자 가 많다 면 모든 관찰 자 를 통지 하 는 데 많은 시간 이 걸린다.
2.관찰자 와 관찰 목표 사이 에 순환 의존 이 있 으 면 관찰 목표 가 그들 사이 에 순환 호출 을 촉발 하여 시스템 붕 괴 를 초래 할 수 있 습 니 다.
3.관찰자 모델 은 해당 하 는 메커니즘 이 없어 서 관찰자 에 게 관찰 하 는 목표 대상 이 어떻게 변화 하 는 지 알 게 하고 관찰 목표 에 변화 가 생 겼 다 는 것 만 알 게 한다.
사용 필드:
4.567917.하나의 추상 적 인 모델 은 두 가지 측면 이 있 는데 그 중 하 나 는 다른 측면 에 의존한다.이런 부분 을 독립 된 대상 에 봉 하여 각자 독립 적 으로 바 꾸 고 재 활용 할 수 있 도록 하 다4.567917.한 대상 의 변 화 는 다른 하나 또는 여러 대상 에 게 도 변 화 를 가 져 올 것 이다.구체 적 으로 얼마나 많은 대상 이 변 할 지 모 르 고 대상 간 의 결합 도 를 낮 출 수 있다4.567917.한 대상 은 반드시 다른 대상 에 게 통지 해 야 하 며,이 대상 들 이 누구 인지 모른다
1.JAVA 에는 이미 관찰자 모드 에 대한 지원 클래스 가 있 습 니 다.
2.반복 참조 피하 기.
3.순서대로 실행 하면 특정한 관찰자 의 오류 로 인해 시스템 이 막 히 고 보통 비동기 방식 을 사용한다.
이루어지다
관찰자 모드 는 세 가지 종류의 Subject,Observer,Client 를 사용 합 니 다.Subject 대상 은 관찰 자 를 클 라 이언 트 대상 으로 연결 하고 클 라 이언 트 대상 에서 관찰 자 를 묶 는 방법 을 가지 고 있 습 니 다.우 리 는 Subject 클래스,Observer 추상 클래스 를 만 들 고 추상 클래스 Observer 의 실체 클래스 를 확장 합 니 다.
Observer PatternDemo,우리 의 프레젠테이션 클래스 는 Subject 와 실체 클래스 대상 을 사용 하여 관찰자 모드 를 보 여 줍 니 다.
단계 1
Subject 클래스 를 만 듭 니 다.
import java.util.ArrayList;
import java.util.List;
public class Subject {
private List<Observer> observers
= new ArrayList<Observer>();
private int state;
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
notifyAllObservers();
}
public void attach(Observer observer){
observers.add(observer);
}
public void notifyAllObservers(){
for (Observer observer : observers) {
observer.update();
}
}
}
단계 2Observer 클래스 를 만 듭 니 다.
public abstract class Observer {
protected Subject subject;
public abstract void update();
}
단계 3실체 관찰자 클래스 를 만 듭 니 다.
public class BinaryObserver extends Observer{
public BinaryObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Binary String: "
+ Integer.toBinaryString( subject.getState() ) );
}
}
public class OctalObserver extends Observer{
public OctalObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Octal String: "
+ Integer.toOctalString( subject.getState() ) );
}
}
public class HexaObserver extends Observer{
public HexaObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Hex String: "
+ Integer.toHexString( subject.getState() ).toUpperCase() );
}
}
단계 4Subject 와 실체 관찰자 대상 을 사용 합 니 다.
public class ObserverPatternDemo {
public static void main(String[] args) {
Subject subject = new Subject();
new HexaObserver(subject);
new OctalObserver(subject);
new BinaryObserver(subject);
System.out.println("First state change: 15");
subject.setState(15);
System.out.println("Second state change: 10");
subject.setState(10);
}
}
단계 5실행 프로그램,출력 결과:
First state change: 15
Hex String: F
Octal String: 17
Binary String: 1111
Second state change: 10
Hex String: A
Octal String: 12
Binary String: 1010
이상 은 인 스 턴 스 코드 로 JAVA 관찰자 모델 의 상세 한 내용 을 설명 하고 JAVA 관찰자 모델 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.