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 {
}
//主函数
public class MainActivity extends Activity {
}
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; } } }); }
}
相关文章推荐
- android 显示/隐藏 view
- Android在TextView中实现RichText风格
- android设置背景色为透明
- 打好Android基础,实战中运用基础
- Android Studio 获取 sha1、MD5签名
- 实现Android的MVP框架
- RecyclerView之使用ItemTouchHelper和ItemTouchHelper.Callback实现条目拖拽排序
- 4.0、Android Studio配置你的构建
- 4.0、Android Studio配置你的构建
- Android 绘制N阶Bezier曲线
- Android GridView 的使用
- Android的Fragment中onActivityResult不被调用的最终解决方案
- Android传感器完全解析
- android 通知(1)
- Android中获取手机通信录中的联系人
- unable to start the daemon process (安卓项目不能运行报错)
- Android中的数据存储(一)----- 文件存储
- Android4编程入门经典 - 学习摘录笔记 - 1
- android json解析
- android 四大组件之Service(7) 结合通知