`

观察者设计模式

 
阅读更多



 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注册的对象方法将会被调用

 



 

  • 大小: 5.2 KB
  • 大小: 61 KB
  • 大小: 17.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics