观察者定义 :定义对象间一种一对多的依赖关系,使得每一个对象改变状态,则所有依赖于它的对象都会得到通知将被自动更新。
创建观察者
package com.amn.amn.ndk_02.design_patterns;
/**
* 观察者:定义了一个update()方法,当被观察者调用notifyObservers()方法时,观察者的update()方法会被回调。
*/
public interface Observer<T> {
public void update(T t);
}
创建被观察者
package com.amn.amn.ndk_02.design_patterns;
/**
* 被观察者 :声明了添加、删除、通知观察者方法
*/
public interface Observerable {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObserver();
}
创建观察者实现类
package com.amn.amn.ndk_02.design_patterns;
import android.util.Log;
public class ObserverImpl01<T> implements Observer<T> {
@Override
public void update(T o) {
Log.i("TAG","ObserverImpl01>>"+ o);
}
}
package com.amn.amn.ndk_02.design_patterns;
import android.util.Log;
public class ObserverImpl02<T> implements Observer<T> {
@Override
public void update(T o) {
Log.i("TAG","ObserverImpl02>>"+ o);
}
}
创建被观察者实现类
package com.amn.amn.ndk_02.design_patterns;
import java.util.ArrayList;
import java.util.List;
import java.util.PropertyResourceBundle;
public class ObserverableImpl<T> implements Observerable {
private List<Observer> observerList;
private T t;
public ObserverableImpl(){
observerList=new ArrayList<>();
}
/**
* 注册/添加观察者
*/
public void registerObserver(Observer observer){
observerList.add(observer);
}
/**
* 注销被观察者
*/
public void removeObserver(Observer observer){
observerList.remove(observer);
}
/**
* 通知观察者更新数据
*/
public void notifyObserver(){
for (Observer observer :observerList){
observer.update(t);
}
}
public void setInfomation(T t){
this.t=t;
notifyObserver();
}
}
使用
ObserverableImpl<Object> observerable = new ObserverableImpl<>();
observerable.registerObserver(new ObserverImpl01());
observerable.registerObserver(new ObserverImpl02());
observerable.setInfomation("java 是世界上最好的语言");
2019-11-08 11:11:45.211 16509-16509/com.amn.amn.ndk_02 I/TAG: ObserverImpl01>>java 是世界上最好的语言
2019-11-08 11:11:45.211 16509-16509/com.amn.amn.ndk_02 I/TAG: ObserverImpl02>>java 是世界上最好的语言
网友评论