android观察者模式

来源:互联网 发布:linux复制命令 编辑:程序博客网 时间:2024/05/02 00:30

android设计模式学习笔记(何红辉,关爱民)

1、观察者模式

这里写图片描述

1、Subject抽象主题

抽象主题,也就是被观察者(Observable)的角色,抽象主题角色把所以观察者对象保存到一个集合中,每个主题都可以有任意观察者的数量,抽象主题提供一个接口,可以增加和删除观察者对象。

2、ConcreteSubject具体主题

具体主题,该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发出通知,具体主题以又叫具体被观察者。

3、Observer抽象观察者

抽象观察者,它定义一个更新的接口,使得在得到主题的更改通知时更新自己。

4、ConcreteObserver具体观察者

该角色实现抽象观察者角色定义的更新接口,以便在主题发生改变时更新自己的状态。

这里写图片描述

代码如下:
1、观察者

public interface Watcher {    void update(String str);}

2、观察者具体实现

public class TestWatcher implements  Watcher {    @Override    public void update(String str) {        System.out.println(str);    }}

3、被观察者

/** * 被观察者 */public interface Watched {    void addWatcher(Watcher wacher);    void removeWatcher(Watcher wacher);    void notifyWatchers(String str);}

4、具体被观察者

package com.example.watcherdemo;import java.util.ArrayList;import java.util.List;/** * 具体被观察者 */public class TestWatched implements  Watched {    private List<Watcher> list=new ArrayList<Watcher>();    @Override    public void addWatcher(Watcher wacher) {        list.add(wacher);    }    @Override    public void removeWatcher(Watcher wacher) {        list.remove(wacher);    }    @Override    public void notifyWatchers(String str) {        for(Watcher watcher:list){            watcher.update(str);        }    }}

测试代码

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //被观察者        Watched hitef = new TestWatched();        //观察者        Watcher watcher1 = new TestWatcher();        Watcher watcher2 = new TestWatcher();        Watcher watcher3 = new TestWatcher();        hitef.addWatcher(watcher1);        hitef.addWatcher(watcher2);        hitef.addWatcher(watcher3);        //当被观察者小偷偷东西的时候,通知观察者,然后做出相应的事件处理。        hitef.notifyWatchers("小偷偷东西");    }}

运行结果
这里写图片描述

3、观察者与Rxjava

从纯java的观点看,Rxjava Observable类来自GOF观察者模式
它添加了三个缺少的功能:

  • 生产者在没有更多数据可用时能够发出信号通知:onComplete()
  • 生产者了生错误时了出信号通知:onError()事件
  • Rxjava Obsrvables能够组合而不是嵌套,从而避免开发者陷入回到的地狱。
1 0
原创粉丝点击