Observer模式,有两个重要的对象我们称之为Observerable和Observer,当Observerable的状态发生改变的时候,注册的observer对象能够得到通知
Observerable对象:
public class Product extends Observable{//广播对象,向往这个对象注册监听的观察者发送广播
private String name;
private int price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
setChanged();
notifyObservers(name);//和监听器的区别,监听器需要有一个判空的操作 1-1 1-N
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
setChanged();
notifyObservers(price);
}
}
Observer对象:
public class NameObserver implements Observer{//监听名字变化的观察者
@Override
public void update(Observable o, Object obj) {
if(obj instanceof String){
System.out.println("name is changed "+obj);
}
}
}
public class PriceObserver implements Observer{//监听价格变化的观察者
@Override
public void update(Observable o, Object arg) {
if(arg instanceof Integer){
System.out.println("price is changed"+arg);
}
}
}
测试:
public class Main {
public static void main(String[] args) {
Product product=new Product();
NameObserver nameObserver=new NameObserver();
PriceObserver priceObserver=new PriceObserver();
//注册观察者
product.addObserver(nameObserver);
product.addObserver(priceObserver);
//发生改变时会通知注册的观察者
product.setName("aas");
product.setPrice(25);
}
}
Android中 在Provide里面增删改方法最后写上
ContentResolver注册一个observer来监听数据的更新,调用ContentResolver的方法registerContentObserver()即可完成注册。这样当对应的ContentProvider数据更新的时候,我们向ContentResolver注册的对象方法将会被调用