디자인 모델 --- 관찰자 모델

2581 단어 관찰자 모드
독서 노트
관찰자 모드: 대상 간 의 다 중 의존 관 계 를 정의 합 니 다. 대상 (테마 대상) 의 상태 가 바 뀌 면 모든 의존 자 (관찰자 대상) 가 알림 을 받 고 자동 으로 업 데 이 트 됩 니 다. 
 
관찰자 모드 는 주제 대상 과 관찰자 대상 간 의 느슨 한 결합 을 실현 하고 새로운 관찰자 가 있 을 때 주제 대상 의 코드 를 수정 하지 않 고 새로운 관찰자 대상 이 인 터 페 이 스 를 실현 해 야 한다.프로그램 이 실행 되 는 과정 에서 주체 대상 에 영향 을 주지 않 고 관찰 자 를 수시로 등록 하고 삭제 할 수 있다. 
 
소프트웨어 디자인 원칙 1: 상호작용 대상 간 에 느슨 한 결합 을 실현 하고 그들 간 의 상호 의존 을 최소 화하 여 재 활용 성 을 향상 시킨다. 
 
자바 에는 관찰자 모드 에 대한 지원 이 내장 되 어 있 습 니 다: 자바 util. Observable 류 와 자바 util. Observer 인터페이스.하지만 한계 가 있다.
관찰자 모드 에서 데 이 터 를 전달 하 는 방식 은 '푸 시' 와 '당 김' 두 가지 가 있 는데 자바 내 장 된 실현 지원 두 가지 방식 이지 만 '푸 시' 데이터 로 자주 사용 된다. 
 
관찰자 모드 는 느슨 한 결합 방식 으로 대상 간 에 상 태 를 전달 하 는데 MVC 가 대표 적 이다. 
 
나의 이해
1. 두 개의 주요 인터페이스 가 있다. 주제 인터페이스, 관찰자 인터페이스
2. 테마 인 터 페 이 스 는 추가, 삭제, 그리고 관찰자 에 게 알 리 는 행위 가 있 습 니 다.관찰자 인터페이스 에 업데이트 행위 가 있다.
3. 소나무 결합 도 결합 이 있 음 을 의미 합 니 다. 주제 자 는 누가 그것 을 구독 하 는 지 알 고 있 습 니 다.구독 자 는 그것 이 누 구 를 구독 하 는 지 안다.
4. 구독 자의 구조 방법 에서 인터페이스 형식의 주제 대상 을 전달 하고 주제 대상 을 호출 하여 사용 자 를 추가 하 는 방법 을 전달 할 수 있다.
5. 테마 측은 개인 적 인 List 를 통 해 구독 자 정 보 를 저장 하고 업데이트 가 있 으 면 List 를 옮 겨 다 니 며 구독 자의 업데이트 방법 을 하나씩 호출 합 니 다.
6  구독, 취소 행 위 는 코드 에서 List 가 요소 에 대한 추가 또는 삭제 로 표 시 됩 니 다.
 
코드 인 스 턴 스
public interface Subject {
	public void addObserver(Observer observer);

	public void removeObserver(Observer observer);

	public void notifyObservers();
}

public interface Observer {
	public void update(String blog);
}

//  
public class Blogger implements Subject {
	private List<Observer> observers;

	private String blog;

	public Blogger() {
		observers = new ArrayList<Observer>();
	}

	public void addObserver(Observer observer) {
		observers.add(observer);
	}

	public void removeObserver(Observer observer) {
		observers.remove(observer);
	}

	public void notifyObservers() {
		for (Observer o : observers) {
			o.update(blog);
		}
	}

	//        
	public void writeNewBlog(String blog) {
		this.blog = blog;
		notifyObservers();
	}
}

//     
public class EmailSubscriber implements Observer {
	public void update(String blog) {
		//       
	}
}

//RSS   
public class RssSubscriber implements Observer {
	public void update(String email) {
		//   RSS  
	}
}

 

좋은 웹페이지 즐겨찾기