관찰자 모드

3024 단어 자바JUnit
자바 의 util 패키지 아래 Observer 인터페이스 와 Observable 류 가 있 는데 관찰자 모드 의 기본 요 소 를 대체적으로 묘사 했다.개인 적 인 이 해 를 편리 하 게 하기 위해 기 존의 기초 위 에서 작은 조정 을 하고 테스트 용례 인 Observer Test 와 Observer 인터페이스의 실현 클래스 Observer 1 을 추가 했다.
관찰자 인터페이스
package org.demo.observer;

public interface Observer {

	void update(Observable observable);
	
}

피 관찰자 대상
package org.demo.observer;

import java.util.Collection;
import java.util.HashSet;

public class Observable {

	private boolean changed = false;
	private Collection<Observer> obs;

	public Observable() {
		obs = new HashSet<Observer>();
	}

	public void addObserver(Observer ob) {
		obs.add(ob);
	}

	public void deleteObserver(Observer ob) {
		obs.remove(ob);
	}

	public void notifyObservers() {
		if (changed) {
			for (Observer ob : obs) {
				ob.update(this);
			}
		}
	}

	public void deleteObservers() {
		obs.removeAll(obs);
	}

	protected void setChanged() {
		changed = true;
	}

	public boolean hasChanged() {
		return changed;
	}

	protected void clearChanged() {
		changed = false;
	}

	public int countObservers() {
		return obs.size();
	}

}

관찰자
package org.demo.observer;

public class Observer1 implements Observer {

	private boolean notified = false;

	public Observer1() {
	}

	@Override
	public void update(Observable observable) {
		notified = true;
	}

	public boolean hasNotified() {
		return notified;
	}

	protected void clearNotified() {
		notified = false;
	}

}

관찰자 테스트 용례
package org.demo.observer;

import junit.framework.TestCase;

public class ObserverTest extends TestCase {

	public void testObserver() {
		Observable observable = new Observable();

		assertEquals(observable.countObservers(), 0);
		Observer1 observer1 = new Observer1();
		observable.addObserver(observer1);
		assertEquals(observable.countObservers(), 1);

		observable.setChanged();
		observable.notifyObservers();
		assertTrue(observer1.hasNotified());

		observable.deleteObserver(observer1);
		assertEquals(observable.countObservers(), 0);

		observable.clearChanged();
		observer1.clearNotified();
		observable.setChanged();
		observable.notifyObservers();
		assertFalse(observer1.hasNotified());
	}

}

관찰자 모델 의 요 소 를 간단하게 설명 한다.
1.피 관찰자 가 제공 하 는 방법 으로 관찰자 의 대상 을 등록 하고 취소 합 니 다.
2.피 관찰자 가 상태 변화 가 발생 한 후에 등 록 된 관찰자 명단 에 따라 관찰자 에 게 일일이 통지 하여 관찰자 가 피 관찰자 의 상태 변화 에 반응 할 수 있 도록 한다.

좋은 웹페이지 즐겨찾기