观察者模式

来源:互联网 发布:苏州php培训 编辑:程序博客网 时间:2024/05/29 19:22

先介绍一下观察者模式,被观察者当然是要被观察者观察的,就比如C想知道B在干什么,但C又不想去监视B,于是就把B的监视工作交给了A,最终是A去监视B;(也就是A是观察者,B是被观察者),至于C,看看下面就知道了。

1)开始创建被观察者B,我这里用Observable代替了,java的util包里已经给我们提供了这个类,所以我们只要继承就好了。

public class Observable extends java.util.Observable {    public void watchered1(){        Log.d("aaa","这是我被观察的方法一");
//setChanged方法必须在notifyObservers之前调用,因为//notifyObservers方法会用到里面boolean值,只有为true的时候notifyObservers才有效
super.setChanged();
//顾名思义,当我调用这个方法是去通知所有观察我的观察者
super.notifyObservers("被观察者方法一");
    }    public void watchered2(){        Log.d("aaa","这是我被观察的方法二");        super.setChanged();        super.notifyObservers("被观察者方法二");    }}
2)创建被观察者A,这里我用MyObserver代替,需要实现Observer接口,重写update方法,里面的Observavle变量暂时不用,具体我没试过,不过应该就是那个被观察者对象。好了,我这里模拟A观察B,A再通知C,当update方法被调用的时候,其实就是B有动静,A观察到了,reportTOOther就相当于A通知C,

public class MyObserver implements java.util.Observer {    @Override    public void update(Observable o, Object arg) {        Log.d("aaa","我观察到了,开始向别人汇报");        reportTOOther(arg.toString());        Log.d("aaa","汇报完毕!");    }    private void reportTOOther(String s) {        Log.d("aaa","收到观察者的信息:"+s);    }}
3)观察者,被观察者都创建完了,那么开始new 出对象,为被观察者添加观察者。当然,被观察者要有动静观察者才能收到消息。因为我这里使用的是as,用eclipse,所以这里的MainActivity中的onCreate方法就相当于java里的main方法,一个程序的入口...当然也不能全说是,反正没必要深究。

public class MainActivity extends AppCompatActivity {    //先创建一个观察者,如果有更多也一样    Observer myObserver = new MyObserver();    //定义出被观察者    Observable observable = new Observable();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //我可以根据我定的,有一个观察者在观察一个被观察者        observable.addObserver(myObserver);        //被观察者要干嘛当然还是要去干嘛的,这样观察者才能收到消息        observable.watchered1();        observable.watchered2();    }}

4)这样一个简单的观察者模式就创建完成了,接着看看运行结果。




1 0
原创粉丝点击