인 스 턴 스 코드 설명 JAVA 관찰자 모드

5012 단어 JAVA관찰자 모드
대상 간 에 한 쌍 의 다 중 관계 가 있 을 때 관찰자 모드(Observer Pattern)를 사용 합 니 다.예 를 들 어 대상 이 수정 되면 의존 하 는 대상 에 게 자동 으로 알려 준다.관찰자 모델 은 행위 형 모델 에 속한다.
소개 하 다.
의도:대상 간 의 다 중 의존 관 계 를 정의 합 니 다.대상 의 상태 가 바 뀌 었 을 때 모든 의존 대상 이 알림 을 받 고 자동 으로 업 데 이 트 됩 니 다.
주요 해결:한 대상 의 상태 가 다른 대상 에 게 알려 주 는 문 제 를 바 꾸 고 사용 하기 쉽 고 낮은 결합 을 고려 하여 고도 의 협력 을 확보 해 야 한다.
언제 사용 할 지:한 대상(대상)의 상태 가 바 뀌 면 모든 의존 대상(관찰자 대상)이 통 지 를 받 고 방송 통 지 를 받 습 니 다.
어떻게 해결 할 것 인가:대상 을 대상 으로 하 는 기술 을 사용 하면 이런 의존 관 계 를 약화 시 킬 수 있다.
핵심 코드:추상 류 에 Array List 가 관찰자 들 을 저장 합 니 다.
인 스 턴 스 적용:
1.경매 할 때 경매 사 는 최고 가격 을 관찰 한 후에 다른 경매 자 에 게 가격 경쟁 을 통지 합 니 다.
2.서유기 에서 오 공 은 보살 에 게 붉 은 아 이 를 굴복 시 켜 달라 고 부탁 했다.보살 이 바닥 에 물 을 뿌 려 늙 은 거북 이 를 불 러 왔 다.이 거북 이 는 바로 관찰자 이다.그 는 보살 이 물 을 뿌리 는 동작 을 관찰 했다.
장점:
1.관찰자 와 피 관찰 자 는 추상 적 인 결합 이다.
2.트리거 메커니즘 을 구축한다.
단점:
1.피 관찰자 대상 에 직접적 이 고 간접 적 인 관찰자 가 많다 면 모든 관찰 자 를 통지 하 는 데 많은 시간 이 걸린다.
2.관찰자 와 관찰 목표 사이 에 순환 의존 이 있 으 면 관찰 목표 가 그들 사이 에 순환 호출 을 촉발 하여 시스템 붕 괴 를 초래 할 수 있 습 니 다.
3.관찰자 모델 은 해당 하 는 메커니즘 이 없어 서 관찰자 에 게 관찰 하 는 목표 대상 이 어떻게 변화 하 는 지 알 게 하고 관찰 목표 에 변화 가 생 겼 다 는 것 만 알 게 한다.
사용 필드:
4.567917.하나의 추상 적 인 모델 은 두 가지 측면 이 있 는데 그 중 하 나 는 다른 측면 에 의존한다.이런 부분 을 독립 된 대상 에 봉 하여 각자 독립 적 으로 바 꾸 고 재 활용 할 수 있 도록 하 다4.567917.한 대상 의 변 화 는 다른 하나 또는 여러 대상 에 게 도 변 화 를 가 져 올 것 이다.구체 적 으로 얼마나 많은 대상 이 변 할 지 모 르 고 대상 간 의 결합 도 를 낮 출 수 있다4.567917.한 대상 은 반드시 다른 대상 에 게 통지 해 야 하 며,이 대상 들 이 누구 인지 모른다
  • 시스템 에서 트리거 체인 을 만들어 야 합 니 다.A 대상 의 행 위 는 B 대상 에 영향 을 줄 것 입 니 다.B 대상 의 행 위 는 C 대상 에 영향 을 줄 것 입 니 다.관찰자 모드 로 체인 트리거 체 제 를 만 들 수 있 습 니 다
  • 주의사항:
    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();
       }
      } 
    }
    단계 2
    Observer 클래스 를 만 듭 니 다.
    
    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() ); 
      }
    }
    단계 4
    Subject 와 실체 관찰자 대상 을 사용 합 니 다.
    
    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 관찰자 모델 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기