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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值