美文网首页安卓开发程序员
安卓设计模式-观察者模式

安卓设计模式-观察者模式

作者: 非爱狂风 | 来源:发表于2019-03-04 10:44 被阅读5次

安卓设计模式-观察者模式

观察者模式是什么

观察者模式又称为模型视图模式、源收听者模式、或者从属模式。在对象之间定义了一对多依赖,当一个对象(被观察者)状态改变,依赖他的对象(观察者)会收到通知并自动更新。

有什么

  • 抽象被观察者角色
    一个抽象的主题,他把所有的观察者对象的引用保存在一个集合中,每个主题都有任意数量的观察者,抽象主题提供一个接口,可以增加删除观察者角色
  • 抽象观察者角色
    为所有的具体观察者定义一个接口,在得到主题是更新自己
  • 具体被观察者角色
    也就是具体的一个主题,在主题内部状态改变时,所有登记者发送通知
  • 具体观察者角色
    实现抽象观察者角色所需的接口更新。

怎么做

观察者模式主要通过以下步骤来实现,

  1. 定义一个主题接口
public interface Observerable{
    public void registerObserver(Observer o);
    public void removeObserver(Observer 0);
    public void notifyObserver();
}
  1. 定义一个抽象观察者接口
public interface Observer{
    public void update (String msg);
}
  1. 定义被观察者实现observerable接口,对observerable三个接口进行具体实现,同事有一个List集合,用于保存注册的观察者,等需要通知观察者的时候,遍历该集合即可
public class MyObserservable implement Observerable{
    private List<Observer> list;
    private String msg;
    public MyObserverable(){
        list=new ArrayList<Observer>();
    }
    public void registerObserver(Observer o){
        list.add(o);
    }
    public void removeObserver(Observer o){
        if(!list.isEmpty()){
            list.remove(o);
        }
    } 
    public void notifyObserver(){
        for(int i=0;i<list.size();i++){
            Observer observer=list.get(i);
            observer.update(msg);
        }
    }
    public void setInfomation(Stirng s){
        this.msg=s;
        notifyObserver();
    }
}

4.定义具体观察者

public MyObserver implement Observer{
private msg=msg;
    public void update (String msg){
        this.msg=msg;
          System.out.println(name + " 收到消息: " + message);
    }
}
public MyObserver2 implement Observer{
private msg=msg;
    public void update (String msg){
        this.msg=msg;
          System.out.println(name + " os2收到消息: " + message);
    }
}
  1. 测试
public class Test{
public static void mian(String args []){
    MyObserver o1=new MyObserver();
    MyObserver1 o2 =new MyObserver1();
    
    MyObserservable os=new MyObserservable();
    os.regiest(o1);
    os.regiest(o2);
    os.setInfomation("2222");
}
}

什么时候用

1.当一个对象改变需要通知其他对象,而不需要具体有多少对象需要通知的时候
2.一个对象必须通知其他对象,而并不知道这些对象是谁。
3.一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
4.需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。

优缺点

优点: 1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制。

缺点: 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

相关文章

  • 安卓设计模式-观察者模式

    安卓设计模式-观察者模式 观察者模式是什么 观察者模式又称为模型视图模式、源收听者模式、或者从属模式。在对象之间定...

  • 设计模式之观察者模式(持续更新中。。。。)

    最近在学习马老师的设计模式课程,观察者模式可以说是安卓中最常见的一种模式,我最少是花了半年时间,才能慢慢理解。设计...

  • 安卓设计模式(二)单例模式

    单例模式是使用最广的设计模式,也是大家最为熟知的. 该系列其他文章: 安卓设计模式(一)面向对象六大设计原则 安卓...

  • Android 设计模式demo项目

    Android 设计模式demo项目 安卓各种设计模式demoGitHub地址android-design-pat...

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • 安卓设计模式之观察者模式

    什么是观察者模式? 观察者模式是一种设计模式,它在对象之间建立一对多依赖关系。每当其中一个对象(“主体”或“可观察...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • 工厂模式

    安卓常用的设计模式 工厂模式(Factory Pattern)是 Android中最常用的设计模式之一。这种类型的...

网友评论

    本文标题:安卓设计模式-观察者模式

    本文链接:https://www.haomeiwen.com/subject/swebuqtx.html