자바 디자인 모드 의 관찰자 모드(Observer 모드)
대상 간 에 한 쌍 의 다 중 관계 가 있 을 때 관찰자 모드(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 모드)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 관찰자 모드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.