관찰자 모드
관찰자 인터페이스
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.피 관찰자 가 상태 변화 가 발생 한 후에 등 록 된 관찰자 명단 에 따라 관찰자 에 게 일일이 통지 하여 관찰자 가 피 관찰자 의 상태 변화 에 반응 할 수 있 도록 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.