자바 디자인 모드 의 관찰자 모드(Observer 모드)

1.관찰자 모드 는 무엇 입 니까?
대상 간 에 한 쌍 의 다 중 관계 가 있 을 때 관찰자 모드(Observer Pattern)를 사용 합 니 다.대상 이 수정 되면 의존 하 는 대상 에 게 자동 으로 알려 줍 니 다.관찰자 모델 은 행위 형 모델 에 속한다.
사람의 말:위 챗 공식 번호 로 메 시 지 를 보 내 는 것 처럼 구독 하 는 사람 은 받 을 수 있 고 구독 하지 않 은 사람 은 받 을 수 없 으 며 구독 을 취소/추가 할 수 있 습 니 다.
2.모델 분석
2.1 네 개의 캐릭터
4.567917.추상 적 인 주제(추상 적 인 피 관찰자 역할):즉,추상 적 인 주제 로 모든 관찰자 대상 에 대한 인용 을 하나의 집합 에 저장 하고 모든 주 제 는 임 의적 인 수량의 관찰자 가 있 을 수 있다.추상 적 인 테 마 는 관찰자 역할 을 추가 하고 삭제 할 수 있 는 인 터 페 이 스 를 제공 합 니 다.일반적으로 추상 류 와 인터페이스 로 이 루어 진다4.567917.추상 적 인 관찰자 역할:모든 구체 적 인 관찰자 에 게 인 터 페 이 스 를 정의 하고 주제 통 지 를 받 을 때 자신 을 업데이트 한다4.567917.구체 적 인 주제(구체 적 인 피 관찰자 역할):즉,구체 적 인 주제 로 단체 주제 의 내부 상태 가 바 뀌 었 을 때 등 록 된 모든 관찰자 가 통 지 를 한다4.567917.구체 적 인 관찰자 역할:추상 적 인 관찰자 역할 에 필요 한 업데이트 인 터 페 이 스 를 실현 하면 서 자신의 상태 와 그림 을 만 드 는 상 태 를 조 화 롭 게 한다2.2 사례
위 챗 공식 번호
1.추상 적 인 주제

public interface  Subject {

    /**
     *      
     */
    void registerObserver(observer observer);

    /**
     *      
     */
    void removeObserver(observer observer);

    /**
     *      
     */
    void notifyObservers();

}

2.추상 관찰자 역할

public interface observer {
    /**
     *   
     */
    void update(String message);
}
3.구체 적 인 주제
Vector 를 사용 하면 스 레 드 가 동기 화 되 고 안전 하 며 Array List 도 사용 할 수 있 습 니 다.스 레 드 가 다른 것 이지 만 안전 하지 않 습 니 다.

public class WechatServer implements Subject{
    //     List        Observer  ,    :               
    private Vector<observer> list;
    private String message;

    public WechatServer() {
        list = new Vector<observer>();
    }
    @Override
    public void registerObserver(observer observer) {
        list.add(observer);
    }

    @Override
    public void removeObserver(observer observer) {
        if(!list.isEmpty())
            list.remove(observer);
    }

    @Override
    public void notifyObservers() {
        for(int i = 0; i < list.size(); i++) {
            observer oserver = list.get(i);
             oserver.update(message);
        }
    }

    public void setInfomation(String s) {
        this.message = s;
        System.out.println("        : " + s);
        //    ,       
        notifyObservers();
    }
}
4.구체 적 인 관찰자 역할

public class User implements observer {
    private String name;
    private String message;

    public User(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        this.message = message;
        read();
    }

    public void read() {
        System.out.println(name + "       : " + message);
    }
}
5.테스트 클래스

public class Test {
    public static void main(String[] args) {
        //  
        WechatServer server = new WechatServer();

        //   
        observer userZhang = new User("ZhangSan");
        observer userLi = new User("LiSi");
        observer userWang = new User("WangWu");
        
        server.registerObserver(userZhang);
        server.setInfomation("C          !");
        System.out.println("====================================");
        server.registerObserver(userLi);
        server.registerObserver(userWang);
        server.setInfomation("JAVA          !");

    }
}
6.결과
在这里插入图片描述
3.관찰자 모델 의 장단 점
장점.
결합 을 해제 하고 결합 하 는 쌍방 을 추상 에 의존 하 게 하여 각자 의 변환 이 다른 측의 변환 에 영향 을 주지 않도록 한다.
결점.
관찰자 모델 을 응용 할 때 개발 효율 과 운영 효율 의 문 제 를 고려 해 야 한다.프로그램 에 피 관찰자,여러 관찰자,개발,디 버 깅 등 내용 이 비교적 복잡 할 뿐만 아니 라 자바 에서 메시지 의 통 지 는 보통 순서대로 집행 된다.그러면 한 관찰자 가 멈 추 면 전체적인 집행 효율 에 영향 을 줄 수 있다.이런 상황 에서 보통 비동기 로 이 루어 진다.
총화
한 대상 의 변화 가 다른 대상 을 동시에 바 꿔 야 하고 구체 적 으로 얼마나 많은 대상 이 바 뀌 어야 할 지 모 를 때 관찰자 모델 을 사용 하 는 것 을 고려 해 야 한다.한편,관찰자 모델 을 사용 하 는 동 기 는 하나의 시스템 을 일련의 상호 협력 유형 으로 나 누 는 것 은 좋 지 않 은 부작용 이 있다.즉,관련 대상 간 의 일치 성 을 유지 해 야 한다.우 리 는 일치 성 을 유지 하기 위해 각종 긴밀 한 결합 을 원 하지 않 는 다.그러면 유지,확장 과 재 활용 에 불편 을 줄 수 있 고 관찰자 모델 이 하 는 일 은 바로 결합 을 해제 하 는 것 이다.
자바 디자인 모델 의 관찰자 모드(Observer 모드)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 관찰자 모드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기