您的位置:首页 > 移动开发 > Android开发

Android 观察者与被观察者

2016-06-25 16:34 288 查看
最近正好闲来无事,正好做完项目,由于里面用到了RxJava,有些许体会,但今天我在这儿,并不会讲RXjava,任何事情都有个循序渐进的过程,后续我会陆续讲RXJAVA并用很通俗的语言,毕竟我每次看到一些博客都有太多专业术语,导致理解起来困难.若你给出了专业术语,你也该解释下啥.废话不说了,下面我们就来讲解观察者与被观察者.

Observer 观察者,说白了就是观察别人.(你这不是,废话吗!)

Obserable 被观察者

注册或者订阅 说白了,就是说明 被观察者指定哪个观察者来观察自己

那我们先来看看三者的关系:

首先被观察者发生了改变,就需要告知观察者,然后观察者会做出相应的措施.二者需要联系起来就靠注册或者订阅.

具体例子借助Android里面的按钮点击事件:

首先button 是被观察者, OnClickListener是观察者, 那该button需要被哪个观察者观察呢?怎样才能联系起来呢,这就需要注册或者订阅.你是否想到了: setOnClickListener.这不是把二者联系起来了.

下面来一个具体例子,再说这个例子之前,先还要继续添加点知识点:

我们先要知道,观察者模式中主要有观察者和被观察者2个对象,而在观察模式中Observable表示被观察者,由于这个对象是一个抽象类只能被继承。而Observer表示观察者,它并不是一个类而是一个接口,所以观察者可以有多个,实现了该接口的类都属于观察者。 当然有人会问既然被观察者是一个抽象类而观察者是一个接口,那么是否有一个类即继承Observable类又实现Observer接口呢,这个自然可以,观察者当然也可以同时是被观察者,被观察者同样可以是观察者,在这里完全不冲突。

//被观察者

public class MyObservable extends Observable{

int age;

String name=”lihuan”;

String sex;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

setChanged();

notifyObservers();

}

@Override

public String toString() {

return “age = “+age+”;”+”name = “+name+”;”+” sex = “+sex;

}

}

//观察者

public class MyObserver implements Observer {

MyObservable myObservable;

@Override
public void update(Observable observable, Object data) {
this.myObservable= (MyObservable) observable;
System.out.println("========"+  myObservable.toString());
}


}

//主函数

public class MainActivity extends Activity {

Button button;
MyObservable myObservable;
MyObserver myObserver;
int count=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

myObservable=new MyObservable();
myObserver=new MyObserver();
myObservable.addObserver(myObserver);

button= (Button) findViewById(R.id.my_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (count==0){
myObservable.setAge(24);
count++;
}else if (count==1){
myObservable.setSex("男");
count=0;
}
}
});
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: