观察者设计模式

观察者设计模式用于建立一种对象之间的依赖关系,当一个对象发生改变时自动通知其他对象,其他对象相应做出反应。

在Android系统中对事件的监听,其实也是一种观察者模式,(一个观察者,多个观察对象)观察者是系统,被观察者是每一个控件,当控件状态改变时,会通知系统执行去执行具体的任务,任务的内容由我们去指定(通过系统回调我们实现的抽象方法),核心还是回调方法(感觉回调方法在框架里扮演了重要角色)

典型代码:(一个观察目标,多个观察者)

抽象出目标对象的接口,里面有通知方法

abstract class Subject {  
    //定义一个观察者集合用于存储所有观察者对象  
protected ArrayList observers<Observer> = new ArrayList();  
  
//注册方法,用于向观察者集合中增加一个观察者  
    public void attach(Observer observer) {  
    observers.add(observer);  
}  
  
    //注销方法,用于在观察者集合中删除一个观察者  
    public void detach(Observer observer) {  
    observers.remove(observer);  
}  
  
    //声明抽象通知方法  
    public abstract void notify();  
}  


抽象出观察者接口,由具体的实现类去实现不同的响应方法,该方法由观察对象调用

interface Observer {  
    //声明响应方法  
    public void update();  
} 


具体目标实现类

class ConcreteSubject extends Subject {  
    //实现通知方法  
    public void notify() {  
        //遍历观察者集合,调用每一个观察者的响应方法  
        for(Object obs:observers) {  
            ((Observer)obs).update();  
        }  
    }     
}  

具体观察者,实现update()方法

class ConcreteObserver implements Observer {  
    //实现响应方法  
    public void update() {  
        //具体响应代码  
    }  
    //通知控制中心,调用notify()方法
    public void sendMessage(Observer observer){
    	observer.notify();
    }
}



测试代码

class Client {  
    public static void main(String args[]) {  
        //定义观察目标对象  
		Subject sub;  
        sub = new Subject(); 
          
        //定义观察者对象  
        Observer ob1,ob2;  
          
        ob1 = new ConcreteSubject();  
        sub.add();  
          
      	ob2 = new ConcreteSubject();
      	sub.add(); 
            
          
        //某成员发送消息  
        ob1.sendMessage();  
    }  
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值