보관물

Posts Tagged ‘Observer’

Observer pattern

2월 22, 2011 댓글 남기기

Observer pattern

한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의합니다.

Diagram

Source

Subject.java

public interface Subject {

public void registerObserver(Observer o);
public void removeObserver(Observer 0);
public void notifyObservers();

}

ConcreteSubject.java

public class ConcreteSubject implements Subject {

private ArrayList arrObserver;
private SomeData someData;

public ConcreteSubject() {

arrObserver = new ArrayList();
someData = new SomeData( 1 , 2 );

}

public void regsterObserver(Observer o) {

arrObserver.add(o);

}

public void removeObserver(Observer o) {

arrObserver.remove( arrObserver.indexOf(o) );

}

public void notifyObservers() {

for (int i=0 ; i < arrObserver.size() ; i++) {

Observer o = (Observer)arrObserver.get(i);
o.update(someData);

}

}

private void updateData(int arg1, int arg2) {

someData.data1 = arg1;
someData.data2 = arg2;

}

}

Observer.java

public interface Observer {

public void update(SomeData someData);

}

ConcreteObserver.java

public class ConcreteObserver implements Observer {

private Subject concreteSubject;
private SomeData someData;

public ConcreteObserver(Subject m_concreteSubject) {

this.concreteSubject = m_concreteSubject;
this.concreteSubject.registerObject(this);

}

public void update(SomeData m_someData) {

someData = m_someData;

}

}

카테고리:Design patterns 태그:,