안 드 로 이 드 의 디자인 모델 - 관찰자 모드
4703 단어 android
public class Publisher implement Observable {
// ,
private ArrayList<Observer> observerList;
public Publisher() {
observerList = new ArrayList<Observer>;
}
@Override
public void register(Observer ob) {
observerList.add(ob); //
}
@Override
public void unregister(Observer ob) {
int index = observerList.indexOf(o);
if (index >= 0) {
observerList.remove(index);
}
}
// list , update
@Override
public void notifyObserver() {
for(int i = 0; i < observerList.size(); i++) {
observerList.get(i).update;
}
}
}
public class Subscriber() implement Observer {
private Publisher publisher;
//
public Subscriber(Publisher publisher) {
this.publisher = publisher;
publisher.register(this);
}
@Override
public void update() {
//
}
}
Android 에서 의 응용 프로그램: Otto EventBusOtto 안 드 로 이 드 시스템 의 Event Bus 모드 라 이브 러 리 입 니 다.응용 구성 요소 간 통신 을 간소화 하기 위해 Read more: http://blog.chengyunfeng.com/?p=450Otto사용 방법: 구성 요소 와 관련 된 수명 주기 에 Bus 클래스 의 register 함 수 를 통 해 등록 한 다음 Bus 클래스 는 클래스 변경 에 @ Produce 와 @ Subscribe 주석 이 있 는 함 수 를 스 캔 합 니 다. @Subscribe 주 해 는 Bus 에 게 이 함수 가 이 벤트 를 구독 하 였 음 을 알려 줍 니 다. 이 이벤트 의 유형 은 이 함수 의 매개 변수 유형 입 니 다.한편, @ Produce 주 해 는 Bus 에 게 이 함수 가 이벤트 발생 자 이 고 발생 하 는 이벤트 유형 은 이 함수 의 반환 값 이 라 고 알려 줍 니 다.post 방법 은 이벤트 register 방법 을 발표 하 는 데 사 용 됩 니 다.
1. 우선 이 페이지 의 모든 pushisher 와 Subscribers 를 옮 겨 다 니 며 Subscriber 를 중점적으로 살 펴 보 겠 습 니 다. Subscribers 의 핵심 코드 는 다음 과 같 습 니 다.
Map<Class<?>, Set<EventHandler>> foundHandlersMap = handlerFinder.findAllSubscribers(object); // object subscribe
for (Class<?> type : foundHandlersMap.keySet()) { //
Set<EventHandler> handlers = handlersByType.get(type); //
if (handlers == null) {
//concurrent put if absent
Set<EventHandler> handlersCreation = new CopyOnWriteArraySet<EventHandler>();
handlers = handlersByType.putIfAbsent(type, handlersCreation);
if (handlers == null) {
handlers = handlersCreation;
}
}
final Set<EventHandler> foundHandlers = foundHandlersMap.get(type);
handlers.addAll(foundHandlers); // , handlersByType ,handlersByType observerList
}
2. 새로운 소비 가 발 송 될 때 post 방법 을 호출 합 니 다.
public void post(Object event) {
if (event == null) {
throw new NullPointerException("Event to post must not be null.");
}
enforcer.enforce(this);
Set<Class<?>> dispatchTypes = flattenHierarchy(event.getClass());
boolean dispatched = false;
for (Class<?> eventType : dispatchTypes) {
Set<EventHandler> wrappers = getHandlersForEventType(eventType); // handlersByType , class
if (wrappers != null && !wrappers.isEmpty()) {
dispatched = true;
for (EventHandler wrapper : wrappers) {
enqueueEvent(event, wrapper);
}
}
}
if (!dispatched && !(event instanceof DeadEvent)) {
post(new DeadEvent(this, event));
}
dispatchQueuedEvents();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.