在Java的世界裏,接口是Java最強大的設計之一。筆者對接口的認識和理解包括:
實現一個接口需要四個步驟
- 接口定義:使用interface,可以外部定義,也可以在類中定義,根據實際需求來。
- 接口調用:接口定義好了,需要調用接口方法
- 接口實現:接口裏的方法是抽象方法,需要開發人員具體的邏輯實現
- 接口注入:把接口實現的引用傳給接口調用方。
接口的作用和意義:
- 通過入參,確定了一種數據流的流動方向,從接口調用方流向接口實現方。也即提供了一種代碼執行的先後順序。
- 降低代碼的耦合。實現接口是java類與類之間的一種關係,比繼承這樣的強依賴的耦合度低。接口涉及Java六大設計原則裏的依賴倒置原則和接口隔離原則,面向抽象編程,對調用者來說執行相同的行爲(代碼),卻可以組織不同的邏輯。
- 作爲靜態常量的容器。可以在接口裏定義各種常量。
在Android裏的基本使用
Rxjava每一次observable發出事件,讓訂閱者執行,都是一次使用接口的過程,滿足上述分析的四個步驟。
Observable.create()使用
EditText裏輸入內容,TextView顯示
(1)Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onStart();
String s = mainEd.getText().toString().trim();
subscriber.onNext(s);
subscriber.onCompleted();
}
});
(2)Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onStart() {
super.onStart();
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
mainTv.setText(s);
}
};
(3)observable.subscribe(subscriber);
分析:
代碼段(1)Observable.create()方法裏,new Observable.OnSubscribe(),完成了subscriber接口的調用。
代碼段(2)使用匿名內部類,完成了接口定義和接口實現。
代碼段(3)完成了接口注入。
因此說,一次Rxjava的操作,就是一次使用接口的過程。明白了這點,如果以後引入Lambda表達式,也就不再容易感到困惑和不解了。
Observable.Just()使用
上述代碼可以簡化寫成下面的樣子
String trim = mainEd.getText().toString().trim();
Observable.just(trim).subscribe(new Action1<String>() {
@Override
public void call(String s) {
mainTv2.setText(s);
}
});
Just和Create生成Observable的關聯:
- just生成的Observable只調用了接口subscriber的onNext()和onComplited()。
- just代碼執行是在訂閱subscribe()方法調用之前,通過create生成的observable在訂閱subscribe()方法調用的時候執行
Observable.from()使用
入參可以是集合或者數組,該集合或數組有多少個元素就會發送多少次事件。
StringBuilder sb = new StringBuilder();
ArrayList<String> list = new ArrayList<>();
list.add("step1");
list.add("step2");
list.add("step3");
list.add("step4");
Observable.from(list).subscribe(new Action1<String>() {
@Override
public void call(String s) {
sb.append(s+" ");
}
});
mainTv3.setText(sb.toString());
上述代碼返回的結果是:step1 step2 step3 step4
小結
有了上述的認識和練習,相信對Rxjava有了一個入門的學習和使用了。
參考資料