android 观察者的框架,Android 架构师7 设计模式之观察者模式

前言

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

6e08c01467ec

观察者模式.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值