Java1.8新特性中的观察者模式
Java1.8新特性里的类封装的观测者模式,可以简化过去定义观察者设计模式(订阅发布模式)代码的步骤
某一个事物状态发生改变,从而产生一系列的连锁反应,那么这个事务就是被观察者;
原理:当被观察者发送变化的时候,是由被观察者主动通知观察者,我发送了变化,你要根据这个变化去做对应的逻辑处理
* 采用这种设计模式的典型:EventBus,RxAndroid
* 提示:喜欢称观察者设计模式为订阅发布模式,因为可以理解为,发布者发布了新的产品,主动的告诉关注发布的订阅者,我有新东西出来了
* 补充一点:观察者设计模式,容易让人误解他的内部结构,但是大家都这么说,所以成惯例,实际上也可以用订阅发布模式去称,我觉得更合理
例子:Android的点击事件就是典型观察者模式
Java1.8新特性里面提供了两个类,观察者与被观察
Java1.8新特性:1.java的JDK必须是1.8及以上版本 2.必须在studio搭建环境才可以使用(搭建环境参考笔记:Java8 环境的搭建)
以点击事件去演示观察者设计模式:
//最典型的观察者设计模式
//被观察者(发布者)
button = (Button) findViewById(R.id.button);
//观察者(订阅者)
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
account.setMoney(1000);
}
};
//发布和订阅关联
//观察对象与被观察对象进行关联
button.setOnClickListener(onClickListener);
实现的基本思路
* 1.创建一个被观察类
function:B.代表着被观察者,银行账户 钱发送变化通知用户信息1.被观察者类继承Observable类2.观察数据3.改变观察数据的方法4.必须要写的两个方法setChanged(); notifyObservers();public class Account extends Observable {public int money = 0;public void setMoney(int money){this.money =money;//observable特有的方法,被观察者必须要写的两个方法setChanged();notifyObservers();}}
* 2.创建一个观察类
function:观察者 用户,当银行账户的钱发送变化时,就会收到用消息
1.被观察者类实现Observer类2.覆写update方法3.对observable参数,要进行判断和强类型转换,因为项目中的被观察者可能很多4.强转被观察者对象,对其观察数据进行一系列的业务逻辑操作
public class Person implements Observer{//注意:参数 1就是继承Observable的被观察者@Overridepublic void update(Observable observable, Object o) {//我们使用observable参数,要进行判断和强类型转换,因为项目中的被观察者可能很多.if( observable instanceof Account){//强转被观察者对象Account account = (Account) observable;System.out.println("银行Account钱的变化 : "+account.money);}}}
* 3.使二者关联
account = new Account();
//创建观察者对象
Person person = new Person();
//把观察者注册到被观察者身上
account.addObserver(person);
//改变被观察者的数据
account.setMoney(500);
提示:当被观察观察数据发送变化时,观察者会执行update方法里的逻辑