Android设计模式之观察者模式

什么是观察者模式?

这种设计模式在我们日常的开发中用的比较多,所谓的观察者模式可以理解报纸的订阅模式,及你预定了报纸后,报社有更新的报纸就会及时的给你送过来。这种设计模式可以帮助我们在编写程序时候能够及时的将改变的信息传出去。

观察者模式涉及到的几个类

1,抽象的观察主题
2,具体的观察主题
3,观察者接口
4,具体的观察者

代码实现

抽象的被观察主题

public abstract class Subject {
/**
 * 用来保存注册的观察着对象
 */
    private ArrayList<Observer> list = new ArrayList<Observer>();
/**
 * 注册观察者对象
 */
    public void attach(Observer observer){
        list.add(observer);
    }
  /**
   * 删除观察者对象    
   */
    public void detach(Observer observer){
        list.remove(observer);
    }
    /**
     * 通知所有的注册的观察者对象,利用接口
     */
    public void nodifyObserver(String newState){
        for (Observer observer:list) {
            observer.update("sadaf");
        }
    }
}

具体的被观察者主题

//state是需要更新的内容 当发生改变是调用change()方法
public class ConcreteSubject extends Subject{
  //需要更新的内容  
    private String state;
    public String getState(){
        return state;
    }
    public void change(String newState){
        state = newState;
        //状态已经发生了改变,通知各个观察者
        this.nodifyObserver(newState);
    }   
}

观察者接口

public interface Observer {
    public void update(String state);
}

具体观察者

//实现Observer就要实现这个接口里面所有的方法
public class ConcreteObserver implements Observer{
    private String observerState;
    public void update(String state) {
        // TODO Auto-generated method stub
          observerState = state;
         System.out.println("状态为:"+observerState);
    }
}

使用

以上就是进行代码的逻辑处理,在使用的过程中我们只需要创建多个观察者对同一个事物进行观察,当这个事物发生变化的时候就会通知所有的被观察者。
public class Client {
   public static void main(String[] args) {
      //创建主题对象
       ConcreteSubject subject =  new ConcreteSubject();

       //创建观察者对象
       Observer observer = new ConcreteObserver();

       //创建观察者对象
       Observer observer2 = new ConcreteObserver();

       //创建观察者对象
       Observer observer3 = new ConcreteObserver();

    //将观察者对象登记到主题对象上去
       subject.attach(observer);
       subject.attach(observer2);
       subject.attach(observer3);

       subject.change("nihao");
       //改变主题的状态
  }
}

控制台显示

数据sadaf
数据sadaf
数据sadaf

posted @   飞航之梦  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示