当前位置: 首页>前端>正文

android 观察者模式页面刷新 安卓 观察者模式

观察者模式(Observer)是解决、解耦的钥匙。最常用的地方是GUI系统、订阅—发布系统。

定义

观察者模式是一种行为类模式,它定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

使用场景

(1)关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系。

(2)事件多级触发场景。

(3)跨系统的消息交换场景,如消息队列、事件总线的处理机制。

角色介绍

Subject:抽象主体也是被观察的角色
ConcreteSubject:具体主体
Observer:抽象观察者
ConcretePbserver:具体观察者

Subject主要方法:

//添加观察者
    @Override
    public synchronized void addObserver(Observer o) {
        super.addObserver(o);
    }
    //删除观察者
    @Override
    public synchronized void deleteObserver(Observer o) {
        super.deleteObserver(o);
    }
    //表示状态或者内容发生改变
    @Override
    protected synchronized void setChanged() {
        super.setChanged();
    }
    //通知所有观察者
    @Override
    public void notifyObservers(Object arg) {
        super.notifyObservers(arg);
    }

Observer主要方法

@Override
    public void update(Observable o, Object arg) {
        //更新的内容
    }

使用案例

比如说我们要在一个网站订阅他的推送消息,在他每更新一次都会为他啊的订阅者推送一系列的文章等.我们就可以把他叫做—-订阅模式,也可以叫做观察者模式

Activity测试类

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //被观察的角色
        Server_side server_side=new Server_side();
        //观察者
        Client client=new Client("小猪");
        Client client1=new Client("小狗");
        Client client2=new Client("小鸭子");

        //将观察者注册到可观察的对象中
        server_side.addObserver(client);
        server_side.addObserver(client1);
        server_side.addObserver(client2);

        //发布消息
        server_side.postNews("萨达姆做好了战斗准备");
    }

具体主体

public class Server_side extends Observable {
    public  void postNews(String content){
        //表示状态或者内容发生改变
        setChanged();
        //通知所有观察者
        notifyObservers(content);
    }
    //添加观察者
    @Override
    public synchronized void addObserver(Observer o) {
        super.addObserver(o);
    }
    //删除观察者
    @Override
    public synchronized void deleteObserver(Observer o) {
        super.deleteObserver(o);
    }
}

具体观察者

public class Client implements Observer {
    String name;

    public Client(String name) {
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {
        Log.e("客户", name+",内容更新了"+"-内容-"+arg);
    }

    @Override
    public String toString() {
        return "客户:"+name;
    }
}

android 观察者模式页面刷新 安卓 观察者模式,android 观察者模式页面刷新 安卓 观察者模式_android 观察者模式页面刷新,第1张

Android源码中的观察者

ListView是重要的控件之一.他最重要的一个功能就是Adapter。通常我们在ListView调用之后都会调用notifyDataSetChanged()方法.因为他就是用了观察者模式..
AdapterView类中有个内部类AdapterDataSetObserver,在ListView中设置Adapter时会构建一个AdapterDataSetObserver并注册到Adapter中,这就是一个观察者
在Adatpter中包含了一个数据集可观察者DataSetObservable,在数据发生变换时,我们可以手动调用Adapter.notifyDataSetChanged. 接下来.notifyDataSetChanged.会调用DataSetObservablenotifyChanged函数遍历所有的观察者onChanged
这就是大概的一个流程,详细的请参考ListViewAdapter的源码.

观察者模式优及缺点

优点

  • 观察者和被观察者之间是抽象耦合,应对业务变化
  • 增强系统灵活性、可扩展性

缺点

  • 应用的时候需要考虑开发效率和运行效率的问题。



https://www.xamrdz.com/web/22d1960085.html

相关文章: