java 观察者模式

观察者模式的作用:

                 主要用于1:N的通知,当目标对象状态发生改变时, 它需要通知一系列的观察者对象,让观察者对象的状态也发生改变。


 

//抽象观察者,定义一个改变自身状态的接口,具体观察者实现该接口,目标对象对具体观察者通知,就是通过该接口。
public interface Observer {
    //改变状态的方法
    void update(Subject sub);
}

 

//具体观察者对象
public class ObserverA implements Observer{
    private  int state;

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    @Override
    public void update(Subject sub) {
        state=((TargetObject)sub).getState();
    }
}

//抽象被观察者,内容包含对观察者操作的方法。
public class Subject {

    //观察者的集合
    private List<Observer> list=new ArrayList<Observer>();

    //注册(添加)观察者
    public void registerObserver(Observer obs){
       if(list != null)
           list.add(obs);
    }

    //删除观察者
    public void unregisterObserver(Observer obs){
        if(list != null)
            list.remove(obs);
    }


    //通知所有观察者
    public void notifyallObserver(){
        for(Observer obj:list){
            obj.update(this);
        }
    }

}
//这是具体目标对象,也就是被订阅的对象,观察者的状态随着被订阅的对象的状态改变而改变
public class TargetObject extends Subject {
    private int state;

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
        //目标对象(被观察者)的状态发生了改变,通知所有的观察者。
        this.notifyallObserver();
    }

}

 

//实例化目标对象
TargetObject subject=new TargetObject();

//实例化观察者对象
ObserverA  Observer1=new ObserverA();
ObserverA  Observer2=new ObserverA();
ObserverA  Observer3=new ObserverA();

//注册观察者对象
subject.registerObserver(Observer1);
subject.registerObserver(Observer2);
subject.registerObserver(Observer3);

//目标对象修改状态
subject.setState(100);
Log.d("finalresult","Observer1.state="+Observer1.getState());
Log.d("finalresult","Observer1.state="+Observer2.getState());
Log.d("finalresult","Observer1.state="+Observer3.getState());

//目标对象修改状态
subject.setState(200);
Log.d("finalresult","Observer1.state="+Observer1.getState());
Log.d("finalresult","Observer1.state="+Observer2.getState());
Log.d("finalresult","Observer1.state="+Observer3.getState());

 观察者的状态结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值