디자인 모델 학습 --- 2. 관찰자 모델
5157 단어 디자인 모드
대상 간 의 한 쌍 이상 의 의존 관 계 를 정의 합 니 다.대상 의 상태 가 바 뀌 면 그 대상 에 의존 하 는 모든 대상 이 알림 을 받 고 자동 으로 업 데 이 트 됩 니 다.
Subject: 대상
한 목표 대상 에 여러 관찰자 가 관찰 하고 있다.
관찰자 추가 및 삭제 유지 보수 제공
목표 가 변 했 을 때 모든 관찰자 에 게 알 립 니 다.
Observer: 관찰자 의 인터페이스, 목표 알림 을 제공 할 때 대응 하 는 업데이트 방법
Concrete Subject: 구체 적 인 목표 대상
Concrete Observer: 구체 적 인 관찰자 대상
Subject 클래스:
package com.light.com;
import java.util.ArrayList;
import java.util.List;
public class Subject {
private List<Observer> observers = new ArrayList<Observer>();
public void attach(Observer o) {
observers.add(o);
}
public void detach(Observer o) {
observers.remove(o);
}
protected void notifyObservers() {
for (Observer o : observers) {
o.update(this);
}
}
}
Observer 인터페이스:
package com.light.com;
public interface Observer {
//
public void update(Subject subject);
}
Concrete Subject 클래스:
package com.light.com;
public class ConcreteSubject extends Subject {
//
private String news;
public String getNews() {
return news;
}
public void setNews(String news) {
this.news = news;
System.out.println(" , ");
this.notifyObservers();
}
}
ConcreteObserver 클래스:
package com.light.com;
public class ConcreteObserver implements Observer {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void update(Subject subject) {
//
System.out.println(name+" , :"+((ConcreteSubject)subject).getNews());
}
}
클 라 이언 트:
package com.light.com;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
ConcreteSubject paper = new ConcreteSubject();
ConcreteObserver reader1 = new ConcreteObserver();
reader1.setName(" ");
ConcreteObserver reader2 = new ConcreteObserver();
reader2.setName(" ");
ConcreteObserver reader3 = new ConcreteObserver();
reader3.setName(" ");
paper.attach(reader1);
paper.attach(reader2);
paper.attach(reader3);
paper.setNews(" ");
System.out.println("--------------");
paper.setNews(" ");
}
}
실행 결과:
염탐꾼 이 돌 아 왔 습 니 다. 중요 한 소식 이 있 습 니 다. 손 권 은 소식 을 들 었 습 니 다. 내용 은 조조 가 유비 에 도착 해서 소식 을 들 었 습 니 다. 내용 은 조조 가 직전 신장 에 도착 해서 소식 을 들 었 습 니 다. 내용 은 조조 가 도 착 했 습 니 다.조조 가 돌 아 갔 어 요.
절 차 를 분석 해 보 자. 만약 에 한 탐정 이 3 자 통수권 자의 군령 을 가지 고 있다 고 가정 하면 새로운 소식 이 있 으 면 바로 자신의 정보 고 를 업데이트 하고 모든 통수권 자의 정보 창고 에 업데이트 가 있다 고 알려 준다. 빨리 와 서 보 자. 통수권 자 는 모두 탐정 의 인용 이 있어 관찰 하기 쉽다.정보 창고 가 업데이트 되면 통 수 는 이 인용 에 따라 탐정 이 업데이트 한 최신 정 보 를 볼 수 있다.감독 은 탐정 에 게 정 보 를 얻 는 데 의존 하지만 탐정 은 사령관 에 게 의존 하지 않 는 다. 예 를 들 어 탐정 은 어떤 통수권 자의 월급 이 낮 아 졌 다 고 생각 하고 일 을 도와 주지 않 으 려 면 이 통수권 자 를 제거 하고 제거 한 통수권 자 도 정 보 를 얻 을 수 없다.감독 은 항상 수 동적 으로 탐정 이 정 보 를 보답 할 때 까지 기다린다.
일반적으로 우 리 는 JAVA 에서 관찰자 모델 을 실현 합 니 다. 시스템 이 제공 하 는 2 가지 종류의 Observable 류 와 Observer 류 만 계승 하면 됩 니 다. 다른 작업 시스템 은 이미 우 리 를 도와 포장 되 었 습 니 다.
Concrete Subject 클래스
package com.light.com;
public class LingLingQi extends java.util.Observable {
private String news;
public String getNews() {
return news;
}
public void setNews(String news) {
this.news = news;
//
this.setChanged();
// , ,
this.notifyObservers(news);
// ,
// this.notifyObservers();
}
}
ConcreteObserver 클래스
package com.light.com;
import java.util.Observable;
public class General implements java.util.Observer {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void update(Observable o, Object arg) {
System.out.println(name+" :"+arg);
}
}
클 라 이언 트 클 라 이언 트
package com.light.com;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
LingLingQi l = new LingLingQi();
General wuTian = new General();
wuTian.setName(" ");
General shangShan = new General();
shangShan.setName(" ");
General yiDa = new General();
yiDa.setName(" ");
l.addObserver(wuTian);
l.addObserver(shangShan);
l.addObserver(yiDa);
l.setNews(" ");
System.out.println("------ ");
l.setNews(" ");
}
}
실행 결과:
이다 정종 은 소식 을 들 었 다: 신 장 은 상 삼 겸 신 을 끊 었 다 소식 을 들 었 다: 신 장 은 무전 신 현 을 끊 었 다 소식 을 들 었 다: 신 장 은 끊 었 다 - 며칠 후에 이다 정종 은 소식 을 들 었 다: 우 차이 수 길이 왔 다 상 삼 겸 신 은 소식 을 들 었 다: 우 차이 수 길이 왔 다 우 다 신 현 은 소식 을 들 었 다: 우 차이 수 길이 왔 다
안 드 로 이 드 의 각종 사건 감청 은 관찰자 모델 을 사 용 했 습 니 다. 한 관찰자 가 여러 개의 목표 대상 을 관찰 한 것 은 마치 통수권 자가 여러 개의 프로 브 를 보 낸 것 과 같 습 니 다. 모든 프로 브 는 서로 다른 인 터 페 이 스 를 통 해 통수권 자 에 게 정보 에 변화 가 생 겼 음 을 알 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.