2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
관찰자 패턴은 게시/구독 패턴이라고도 합니다. GOF는 관찰자 패턴을 다음과 같이 정의합니다. 객체 간의 일대다 종속 관계를 정의하여 여러 관찰자 객체가 동시에 동일한 객체에 집중할 수 있도록 합니다. 객체의 상태가 변경되면 해당 객체에 의존하는 모든 객체가 자동으로 알림 및 업데이트됩니다.
아래 그림과 같이 관찰자 패턴에는 5가지 유형의 객체가 포함되어 있습니다.
구체적인 구현을 살펴보겠습니다.
(1) 관찰자 인터페이스 Observer.java는 통합 업데이트 인터페이스 update()를 정의합니다. 해당 소스 코드는 다음 프로그램에 표시됩니다.
package behavior.observer;
/**
* @author Minggg
* 观察者接口
*/
public interface Observer {
public void update();
}
(2) 옵저버 구현 클래스 Observer1.java는 옵저버의 특정 구현이며, 해당 업데이트 함수를 사용하여 콘솔에 문자열을 출력합니다. 해당 소스 코드는 다음 프로그램에 표시됩니다.
package behavior.observer;
/**
* @author Minggg
* 具体观察者
*/
public class Observer1 implements Observer {
public void update(){
System.out.println("观察者1得到通知!");
}
}
(3) 옵저버 구현 클래스 Observer2.java는 또 다른 옵저버의 특정 구현이며, 해당 업데이트 함수를 사용하여 콘솔에 문자열을 출력합니다. 해당 소스 코드는 다음 프로그램에 표시됩니다.
package behavior.observer;
/**
* @author Minggg
* 具体观察者
*/
public class Observer2 implements Observer {
public void update(){
System.out.println("观察者2得到通知!");
}
}
(4) 관찰 인터페이스 Subject.java는 관찰자를 조작하기 위한 세 가지 인터페이스 기능을 정의하고, 자신의 기능을 나타내는 특정 조작 기능 인터페이스를 정의합니다. 해당 소스 코드는 다음 프로그램에 표시됩니다.
package behavior.observer;
/**
* @author Minggg
* 被观察者接口
*/
public interface Subject {
// 增加观察者
public void attach(Observer observer);
// 删除观察者
public void detach(Observer observer);
// 通知所有观察者
public void notifyObservers();
// 自身的操作接口
public void operation();
}
(5) 관찰된 추상 클래스 AbstractSubject.java는 모든 관찰자 객체를 저장하기 위한 Vector 목록 벡터를 제공하고, 목록 객체를 조작하기 위한 구현 함수를 작성합니다. 해당 소스 코드는 다음 프로그램에 표시됩니다.
package behavior.observer;
import java.util.Enumeration;
import java.util.Vector;
/**
* @author Minggg
* 被观察者抽象类
*/
public abstract class AbstractSubject implements Subject {
private Vector