Android 观察者与被观察者

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

  1. Observer 观察者,说白了就是观察别人.(你这不是,废话吗!)
  2. Obserable 被观察者
  3. 注册或者订阅 说白了,就是说明 被观察者指定哪个观察者来观察自己

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

具体例子借助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;
            }
        }
    });
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值