관찰자 모드(이거 너무 많이 썼어)
7708 단어 java 디자인 모드
하나.관찰자 모드의 정의
대상 간의 일대다 의존 관계를 정의합니다. 대상이 상태를 바꾸지 않으면 모든 의존 대상이 알림을 받고 자동으로 업데이트됩니다.
둘.관찰자 모드의 사용 장면
(1).연관 동작 장면에서 주의해야 할 것은 연관 동작은'조합'관계가 아니라 분리할 수 있다는 것이다.
(2).이벤트 다중 트리거 장면
(3).크로스 시스템의 메시지 교환 장면, 예를 들어 메시지 대기열, 이벤트 버스의 처리 메커니즘.
셋.관찰자 모드의 UML 클래스
역할 소개:
ject: 추상적인 주제(Observer), 즉 관찰된observable의 역할이다. 추상적인 주제 역할은 모든 관찰자 대상의 인용을 하나의 집합에 저장하고 모든 주제는 임의의 관찰자가 있을 수 있다. 추상적인 주제는 하나의 인터페이스를 제공하여 관찰자 대상을 증가하거나 삭제할 수 있다.
concreteSubject: 구체적인 주제(ConcreteObservable). 이 역할은 관련 상태를 구체적인 관찰 대상에 저장하고 구체적인 주제의 내부 상태가 바뀔 때 등록된 모든 관찰자에게 알림을 보낸다. 구체적인 주제 역할은 구체적인 관찰 대상(ConcreteObservable) 역할이라고도 부른다.
observale: 추상적인 관찰자, 이 역할은 관찰자의 추상적인 클래스로 업데이트 인터페이스를 정의하여 주제의 변경 알림을 받을 때 자신을 업데이트합니다.
ConcreteObserver: 구체적인 관찰자, 이 역할은 추상적인 관찰자 역할이 정의한 업데이트 인터페이스를 실현하여 주제의 상태가 변할 때 자신의 상태를 업데이트합니다.
넷.관찰자 모델의 간단한 실현 /**
* Created by Administrator on 2016/4/4 0004.
* //
*/
public interface Observer {
void update(String str);
}
/**
* Created by Administrator on 2016/4/4 0004.
* //
*/
public interface Observable {
void addObserver(Observer obs);
void notifyAllChanges(String str);
void removeObserver(Observer obs);
}
/**
* Created by Administrator on 2016/4/4 0004.
*/
public class ConcreteObserver implements Observer {
private String name ;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String str) {
System.out.println(str+name);
}
}
/**
* Created by Administrator on 2016/4/4 0004.
* //
*/
public class ConcreteObservable implements Observable {
//
private List list = new ArrayList();
@Override
public void addObserver(Observer obs) {
list.add(obs);
}
@Override
public void notifyAllChanges(String str) {
//
for (Observer watcher : list) {
watcher.update(str);
}
}
@Override
public void removeObserver(Observer obs) {
list.remove(obs);
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable girl = new ConcreteObservable(); //
Observer watcher1 = new ConcreteObserver(" "); //
Observer watcher2 = new ConcreteObserver(" "); //
Observer watcher3 = new ConcreteObserver(" "); //
girl.addObserver(watcher1);
girl.addObserver(watcher2);
girl.addObserver(watcher3);
girl.notifyAllChanges(" "); // //
}
}
결과:
오늘 날씨 맑음 크레인 1호 오늘 날씨 맑음 크레인 2호 오늘 날씨 맑음 크레인 3호
5. 고급 실천은 다음 블로그 안드로이드 이벤트버스 원본 분석을 참고할 수 있다.
http://blog.csdn.net/u011889786/article/details/51056215
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 설계 모드 중 하나(단순 플랜트 모드)
1. 간단한 공장 모델은 무엇입니까?
단순 공장 모델은 유형의 창설형 모델에 속하고 정적 공장 방법 모델이라고도 부른다.하나의 클래스를 전문적으로 정의함으로써 다른 클래스의 실례를 만드는 것을 책임진다.
생성된 실례...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
(1).연관 동작 장면에서 주의해야 할 것은 연관 동작은'조합'관계가 아니라 분리할 수 있다는 것이다.
(2).이벤트 다중 트리거 장면
(3).크로스 시스템의 메시지 교환 장면, 예를 들어 메시지 대기열, 이벤트 버스의 처리 메커니즘.
셋.관찰자 모드의 UML 클래스
역할 소개:
ject: 추상적인 주제(Observer), 즉 관찰된observable의 역할이다. 추상적인 주제 역할은 모든 관찰자 대상의 인용을 하나의 집합에 저장하고 모든 주제는 임의의 관찰자가 있을 수 있다. 추상적인 주제는 하나의 인터페이스를 제공하여 관찰자 대상을 증가하거나 삭제할 수 있다.
concreteSubject: 구체적인 주제(ConcreteObservable). 이 역할은 관련 상태를 구체적인 관찰 대상에 저장하고 구체적인 주제의 내부 상태가 바뀔 때 등록된 모든 관찰자에게 알림을 보낸다. 구체적인 주제 역할은 구체적인 관찰 대상(ConcreteObservable) 역할이라고도 부른다.
observale: 추상적인 관찰자, 이 역할은 관찰자의 추상적인 클래스로 업데이트 인터페이스를 정의하여 주제의 변경 알림을 받을 때 자신을 업데이트합니다.
ConcreteObserver: 구체적인 관찰자, 이 역할은 추상적인 관찰자 역할이 정의한 업데이트 인터페이스를 실현하여 주제의 상태가 변할 때 자신의 상태를 업데이트합니다.
넷.관찰자 모델의 간단한 실현 /**
* Created by Administrator on 2016/4/4 0004.
* //
*/
public interface Observer {
void update(String str);
}
/**
* Created by Administrator on 2016/4/4 0004.
* //
*/
public interface Observable {
void addObserver(Observer obs);
void notifyAllChanges(String str);
void removeObserver(Observer obs);
}
/**
* Created by Administrator on 2016/4/4 0004.
*/
public class ConcreteObserver implements Observer {
private String name ;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String str) {
System.out.println(str+name);
}
}
/**
* Created by Administrator on 2016/4/4 0004.
* //
*/
public class ConcreteObservable implements Observable {
//
private List list = new ArrayList();
@Override
public void addObserver(Observer obs) {
list.add(obs);
}
@Override
public void notifyAllChanges(String str) {
//
for (Observer watcher : list) {
watcher.update(str);
}
}
@Override
public void removeObserver(Observer obs) {
list.remove(obs);
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable girl = new ConcreteObservable(); //
Observer watcher1 = new ConcreteObserver(" "); //
Observer watcher2 = new ConcreteObserver(" "); //
Observer watcher3 = new ConcreteObserver(" "); //
girl.addObserver(watcher1);
girl.addObserver(watcher2);
girl.addObserver(watcher3);
girl.notifyAllChanges(" "); // //
}
}
결과:
오늘 날씨 맑음 크레인 1호 오늘 날씨 맑음 크레인 2호 오늘 날씨 맑음 크레인 3호
5. 고급 실천은 다음 블로그 안드로이드 이벤트버스 원본 분석을 참고할 수 있다.
http://blog.csdn.net/u011889786/article/details/51056215
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 설계 모드 중 하나(단순 플랜트 모드)
1. 간단한 공장 모델은 무엇입니까?
단순 공장 모델은 유형의 창설형 모델에 속하고 정적 공장 방법 모델이라고도 부른다.하나의 클래스를 전문적으로 정의함으로써 다른 클래스의 실례를 만드는 것을 책임진다.
생성된 실례...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
/**
* Created by Administrator on 2016/4/4 0004.
* //
*/
public interface Observer {
void update(String str);
}
/**
* Created by Administrator on 2016/4/4 0004.
* //
*/
public interface Observable {
void addObserver(Observer obs);
void notifyAllChanges(String str);
void removeObserver(Observer obs);
}
/**
* Created by Administrator on 2016/4/4 0004.
*/
public class ConcreteObserver implements Observer {
private String name ;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String str) {
System.out.println(str+name);
}
}
/**
* Created by Administrator on 2016/4/4 0004.
* //
*/
public class ConcreteObservable implements Observable {
//
private List list = new ArrayList();
@Override
public void addObserver(Observer obs) {
list.add(obs);
}
@Override
public void notifyAllChanges(String str) {
//
for (Observer watcher : list) {
watcher.update(str);
}
}
@Override
public void removeObserver(Observer obs) {
list.remove(obs);
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable girl = new ConcreteObservable(); //
Observer watcher1 = new ConcreteObserver(" "); //
Observer watcher2 = new ConcreteObserver(" "); //
Observer watcher3 = new ConcreteObserver(" "); //
girl.addObserver(watcher1);
girl.addObserver(watcher2);
girl.addObserver(watcher3);
girl.notifyAllChanges(" "); // //
}
}
결과:
오늘 날씨 맑음 크레인 1호 오늘 날씨 맑음 크레인 2호 오늘 날씨 맑음 크레인 3호
5. 고급 실천은 다음 블로그 안드로이드 이벤트버스 원본 분석을 참고할 수 있다.
http://blog.csdn.net/u011889786/article/details/51056215
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 설계 모드 중 하나(단순 플랜트 모드)1. 간단한 공장 모델은 무엇입니까? 단순 공장 모델은 유형의 창설형 모델에 속하고 정적 공장 방법 모델이라고도 부른다.하나의 클래스를 전문적으로 정의함으로써 다른 클래스의 실례를 만드는 것을 책임진다. 생성된 실례...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.