为了学springCloud的hystrix,没办法呀,只能硬啃咯~。当然,为了学这个我还是参考了这个博客https://www.jianshu.com/p/5e93c9101dc5
那么还是从如何用开始了解。
Observable<String> sender = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("有人找工作吗?");
}
});
Observer<String> receiver = new Observer<String>() {
@Override
public void onCompleted() {
// 数据接收完成时调用
}
@Override
public void onError(Throwable e) {
// 发生错误调用
}
@Override
public void onNext(String s) {
// 正常接收数据调用
System.out.print(s); // 将接收到来自sender的问候"Hi,Weavey!"
}
};
sender.subscribe(receiver);
从上面来看,observer是一个观察者,等待Observable发送消息。
借鉴一下上述博客当中的最后一个表达rxJava魅力的地方。
Observable.create(new Observable.OnSubscribe<List<User>>() {
@Override
public void call(Subscriber<? super List<User>> subscriber) {
//(1)本来的需求是 查找所有的用户
List<User> userList = null;
···
//从数据库获取用户表数据并赋给userList
···
subscriber.onNext(userList);
}
}).flatMap(new Func1<List<User>, Observable<User>>() {
@Override
public Observable<User> call(List<User> users) {
return Observable.from(users);
}
}).filter(new Func1<User, Boolean>() {
@Override
public Boolean call(User user) {
//(2)需求变了,需要改成找到名字是小明的用户
//这个时候我们看见了,我并没有去改变(1)当中的代码
return user.getName().equals("小明");
}
}).map(new Func1<User, User>() {
@Override
public User call(User user) {
//(3)需求又变了。根据小明的数据user从数据库查找出小明的父亲user2
return user2;
}
}).subscribe(new Action1<User>() {
@Override
public void call(User user2) {
//拿到谜之小明的爸爸的数据
}
});
这样带来的阅读性,确实无可比拟,基本注释都可以省略了,可是换个角度,我认为这样会牺牲一定的性能。
还有一个扮演两个角色的角色—Subject
能扮演两个角色,无非就是实现了上述两个接口
public abstract class Subject<T, R> extends Observable<R> implements Observer<T>