자바 디자인 모드 의 관찰자 모드
관찰자 모델 은 실제 에서 비교적 광범 위 하 게 응용 되 는 모델 이다.그 응용 장면 은 예 를 들 어 쌀 을 생산 하 는 공장 과 n 개의 쌀 을 판매 하 는 업 체,n 개의 업 체 가 먼저 이 공장 에 자신의 연락 처 를 등록 하고 공장 에서 일 정량의 쌀 을 생산 한 후에 연락처 에 따라 이 n 개의 업 체 에 게 물건 을 찾 으 라 고 통지 하 는 것 이다.이 예 에 서 는 관찰자 모드 의 등록(Attach)과 알림(Notify)을 사 용 했 습 니 다.즉,알림 자의 상태 가 바 뀌 었 을 때 각 관찰자 에 게 순서대로 알려 줍 니 다.
Subject 는 추상 적 인 알림 자 이 고 Observer 는 추상 적 인 관찰자 이다.만약 에 만 들 려 는 파생 류 가 바람 과 말 과 소 가 서로 미 치지 못 하 는 대상 이 라면 인 터 페 이 스 를 이용 하여 몇 가지 똑 같은 방법 을 실현 하 는 것 을 고려 할 수 있다.
자바 코드 는 다음 과 같 습 니 다:
abstract class Subject {
private ArrayList<Observer> observersList = new ArrayList<Observer>();
// add observers
public void Attach(Observer ob) {
observersList.add(ob);
}
// remove observers
public void Detach(Observer ob) {
observersList.remove(ob);
}
public void Notify()
{
for (Observer ob : observersList) {
ob.Update();
}
}
}
abstract class Observer {
public abstract void Update();
}
public class ConcreteObserver extends Observer {
private String name;
private String observerStatus;
private ConcreteSubject subject;
public ConcreteObserver(ConcreteSubject subject, String name)
{
this.subject = subject;
this.name = name;
}
public void Update()
{
observerStatus = subject.getSubjectStatus();
}
}
public class ConcreteSubject extends Subject {
private String subjectStatus;
public String getSubjectStatus() {
return subjectStatus;
}
public void setSubjectStatus(String subjectStatus) {
this.subjectStatus = subjectStatus;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ConcreteSubject s = new ConcreteSubject();
s.Attach(new ConcreteObserver(s, "X"));
s.Attach(new ConcreteObserver(s, "Y"));
s.Attach(new ConcreteObserver(s, "Z"));
s.setSubjectStatus("Ready");
s.Notify();
}
}
상기 코드 에는 추상 적 인 관찰자 와 추상 적 인 알림 이 있다.Subject 의 상태 가 바 뀌 면 함 수 를 호출 하면 내부 에 등 록 된 관찰자 에 게 알 릴 수 있 습 니 다.이런 디자인 사상 은 평소에 도 흔히 볼 수 있 는 것 이다.예 를 들 어 처음에 언급 한 쌀 을 생산 하 는 공장 과 쌀 을 판매 하 는 업 체 등 이다.서점 에 있 는 어떤 책 이 품절 되 었 는데 도 고객 이 사고 싶 으 면 등록 을 할 수 있 고 물건 이 나 오 면 서점 주인 이 전 화 를 걸 어 책 을 사고 싶 은 고객 에 게 차례대로 알려 준다.이런 등록 체 제 는 다른 프로 그래 밍 기법 에서 도 많이 나타난다.예 를 들 어 프로그램 이 바 텀 라 이브 러 리 에 여러 개의 반전 함 수 를 등록 하고 조건 이 만족 하면 바 텀 라 이브 러 리 는 최상 위 에서 제공 하 는 반전 함 수 를 알려 준다.상기 코드 는 자바 가 쓴 것 이 고 C++의 말 도 비슷 하 며 주로 Subject 가 Observer 를 저장 하 는 지침 입 니 다.그러나 C++는 메모리 방출 문 제 를 고려 해 야 합 니 다.Observer 자체 가 소각 되 려 면 Subject 의 Detach 함 수 를 호출 해 야 합 니 다.그렇지 않 으 면 업데이트 할 때 야 지침 을 사용 하여 crash 문 제 를 일 으 킬 수 있 습 니 다.Subject 를 사용 하여 Observer 의 수명 주 기 를 관리 하 는 것 을 고려 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.