前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >033android初级篇之android的Observer模式

033android初级篇之android的Observer模式

作者头像
上善若水.夏
发布2018-09-28 10:43:01
2.1K0
发布2018-09-28 10:43:01
举报
文章被收录于专栏:上善若水上善若水

android中的Observer模式,是继承自java的实现,使用Observable类和Observer实现。

Observer模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和 java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标(subject)角色。

应用场景

  1. 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
  2. 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。

优缺点

observer模式的优点

  1. Subject和Observer之间是松耦合的,分别可以各自独立改变。
  2. Subject在发送广播通知的时候,无须指定具体的Observer,Observer可以自己决定是否要订阅Subject的通知。
  3. 遵守大部分GRASP原则和常用设计原则,高内聚、低耦合。

observer模式的缺点

  1. 松耦合导致代码关系不明显;
  2. 如果一个Subject被大量Observer订阅的话,在广播通知的时候可能会有效率问题。(毕竟只是简单的遍历);
  3. 如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。

实现

1. 创建被观察者类,继承自java.util.Observable类;

代码语言:javascript
复制
public class HousePriceObservable extends Observable {
    private  int price=0;
    public  int getPrice() {
        return  price;
    }
    public  void setPrice(int i) {
        price = i;
        setChanged();
        notifyObservers();
    }
}

HousePriceObservable是被观察者,当它的数据发生变化,调用

代码语言:javascript
复制
setChanged();
notifyObservers();

通知它的观察者。

2. 创建观察者类,它实现java.util.Observer接口;

要实现Observer接口的唯一方法update

代码语言:javascript
复制
  public  class  HousePriceObserver implements Observer {
    public void update(Observable o,Object arg) {
        HousePriceObservable m = (HousePriceObservable) o;
        System.out.println("HousePrice has changed to "+ m.getPrice());
    }
}

HousePriceObserver是观察者,当他的被观察者HousePriceObservable 执行了notifyObservers()方法后,它会调用update()方法。

3.对于被观察者需要调用addObserver()方法,添加它的观察者列表。

代码语言:javascript
复制
void addObserver(Observer o)

测试代码

代码语言:javascript
复制
HousePriceObservable mHousePriceObservable = new HousePriceObservable();
HousePriceObserver mHousePriceObserver = new HousePriceObserver();

mHousePriceObservable.addObserver(mHousePriceObserver);
mHousePriceObservable.setPrice(1);
mHousePriceObservable.setPrice(2);
mHousePriceObservable.setPrice(3);

参考链接

  1. Java:应用Observer接口实践Observer模式
  2. GRASP (职责分配原则)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.02.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 应用场景
  • 优缺点
    • observer模式的优点
      • observer模式的缺点
      • 实现
        • 1. 创建被观察者类,继承自java.util.Observable类;
          • 2. 创建观察者类,它实现java.util.Observer接口;
            • 3.对于被观察者需要调用addObserver()方法,添加它的观察者列表。
            • 参考链接
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档