android 观察者的框架,Android 架构师7 设计模式之观察者模式
前言
當對象間存在一對多關系時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知它的依賴對象。觀察者模式屬于行為型模式。
觀察者模式.png
觀察者模式
被觀察者,即主題角色:
public abstract class AbstractSubject {
private List observers;
AbstractSubject() {
observers = new ArrayList<>();
}
public void attach(IObserver observer) {
observers.add(observer);
}
public void detach(IObserver observer) {
observers.remove(observer);
}
public void notifyObserver(String content) {
for (IObserver observer : observers) {
observer.update(content);
}
}
}
具體主題ConcreteSubject ,暫時沒有任何代碼:
public class ConcreteSubject extends AbstractSubject {
}
觀察者接口IObserver :
public interface IObserver {
void update(String content);
}
觀察者具體類ConcreteObserver :
public class ConcreteObserver implements IObserver {
private final String observerName;
public ConcreteObserver (String observerName) {
this.observerName = observerName;
}
@Override
public void update(String content) {
System.out.println(observerName + "接收到了消息:" + content);
}
}
客戶端Client 調用:
public class Client {
public static void main(String[] args) {
AbstractSubject subject = new ConcreteSubject();
IObserver observer1 = new ConcreteObserver("觀察者1號");
IObserver observer2 = new ConcreteObserver("觀察者2號");
IObserver observer3 = new ConcreteObserver("觀察者3號");
subject.attach(observer1);
subject.attach(observer2);
subject.attach(observer3);
subject.notifyObserver("被觀察者發生了變化");
}
}
主體思想就是:被觀察者調用attach方法將觀察者放入自己的集合中,當自己的數據改變時,調用notifyObserver方法去遍歷循環,從而調用集合中的每個觀察者的update方法,完成數據更新變化的通知。
運行結果是:
觀察者1號接收到了消息:被觀察者發生了變化
觀察者2號接收到了消息:被觀察者發生了變化
觀察者3號接收到了消息:被觀察者發生了變化
觀察者模式在Android中的應用
Android中的各種監聽器都是應用的觀察者模式,RxJava框架也是應用的觀察者模式。
總結
觀察者模式在Android中應用的還是很廣泛的,觀察者模式中觀察者和被觀察者是抽象耦合的,避免了緊耦合等問題,但是如果被觀察者較多或者間接被觀察者較多的情況下,會導致遍歷所花的時間較多,當然這個數量級恐怕很少能達到。至于某些博客說的觀察者無法知道被觀察者數據是如何變化的是觀察者的缺點,這點我并不能茍同,我認為這正是封裝的好處,你無需知道內部是如何進行的,這并不是觀察者模式的缺點,反而是封裝的好處。
喜歡本篇博客的簡友們,就請來一波點贊,您的每一次關注,將成為我前進的動力,謝謝!作者:zhang_pan
總結
以上是生活随笔為你收集整理的android 观察者的框架,Android 架构师7 设计模式之观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 概括鸿蒙系统的优势,从开发语言分析鸿蒙系
- 下一篇: html事件绑定的方法,javascri