Android 开发--观察者模式

观察者 模式 有两个 角色,观察者observer ,被观察者observable。

  • Observer 是个接口,只有一个方法 void update(Observable o, Object arg);
  • Observable 是一个类,只有两个参数
    private boolean changed = false;//是否发生改变
    private Vector<Observer> obs;// 存放 观察者的 容器 就说明是 一对多,可以有多个观察者。
    方法:
addObserver(Observer o)//添加 观察者
 deleteObserver(Observer o)//删除 观察者
notifyObservers()    //提醒 观察者有更新
notifyObservers(Object arg)
deleteObservers()//删除全部 观察者
setChanged()//  changed ->true  有更新
clearChanged() //changed ->false
hasChanged()//是否有更新
countObservers()//观察者数量

重要函数 notifyObservers

   public void notifyObservers(Object arg) {
  Object[] arrLocal;
  if (!changed)
                return;
            arrLocal = obs.toArray();//把vector里的数据(观察者)取出来放在 数组中
            clearChanged();//恢复 状态 false 没有改变
 for (int i = arrLocal.length-1; i>=0; i--)
            ((Observer)arrLocal[i]).update(this, arg);然后 依次通知 观察者
}

跑个demo 溜溜

  • Student (观察者)
public class Student implements Observer{

    private String name;
    
    public Student(String name) {
        super();
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {
         
        System.out.println("来自"+o.getClass().getSimpleName().toString()+"的消息 :        尊敬的"+name+" 先生  "+arg);
    }

}
  • Teacher (被观察者)
public class Teacher_Cang extends Observable{

    @Override
    public synchronized void addObserver(Observer o) {
        // TODO Auto-generated method stub
        super.addObserver(o);
    }
    @Override
    public void notifyObservers(Object arg) {
        // TODO Auto-generated method stub
        super.notifyObservers(arg);
    }

    @Override
    protected synchronized void setChanged() {
        // TODO Auto-generated method stub
        super.setChanged();
    }
}
public class Teacher_Wu extends Observable{

    @Override
    public synchronized void addObserver(Observer o) {
        // TODO Auto-generated method stub
        super.addObserver(o);
    }
    @Override
    public void notifyObservers(Object arg) {
        // TODO Auto-generated method stub
        super.notifyObservers(arg);
    }

    @Override
    protected synchronized void setChanged() {
        // TODO Auto-generated method stub
        super.setChanged();
    }
  • 主程序
public static void main(String[] args){
        
        
        Student liMing = new Student("李明");
        Student zhangSan = new Student("张三");
        
        Teacher_Wu Wu = new Teacher_Wu();
        Teacher_Cang Cang = new Teacher_Cang();
        
        Wu.addObserver(liMing);
        
        Cang.addObserver(zhangSan);
        Cang.addObserver(liMing);
        
        Cang.setChanged();
        Cang.notifyObservers("老师有新作了~~");
        
        Wu.setChanged();
        Wu.notifyObservers("比隔壁 苍老师 还要劲爆奥~");
    
    }

最后 运行结果

1870221-3431e9f9f95e234e.png
运行结果

把陌生知识用有趣的例子表现出来~~哈哈

射虎不成重练箭,斩龙不断再磨刀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值