Skip to content

Commit 767e16a

Browse files
author
alafighting
committed
修改CacheStrategy为enum,使用更简单
1 parent 5f3431e commit 767e16a

File tree

13 files changed

+83
-120
lines changed

13 files changed

+83
-120
lines changed

app/src/main/java/com/im4j/kakacache/rxjava/demo/GitHubService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.im4j.kakacache.rxjava.CACHE;
44
import com.im4j.kakacache.rxjava.netcache.ResultData;
5-
import com.im4j.kakacache.rxjava.netcache.strategy.CacheAndRemoteStrategy;
5+
import com.im4j.kakacache.rxjava.netcache.strategy.CacheStrategy;
66

77
import java.util.List;
88

@@ -18,7 +18,7 @@ public interface GitHubService {
1818
rx.Observable<List<GithubRepoEntity>> listReposForNormal(@Path("user") String user);
1919

2020
@GET("users/{user}/repos")
21-
@CACHE(value = "custom_key_listRepos", strategy = CacheAndRemoteStrategy.class)
21+
@CACHE(value = "custom_key_listRepos", strategy = CacheStrategy.CacheAndRemote)
2222
rx.Observable<ResultData<List<GithubRepoEntity>>> listReposForKaka(@Path("user") String user);
2323

2424
}

app/src/main/java/com/im4j/kakacache/rxjava/demo/MainActivity.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77

88
import com.im4j.kakacache.rxjava.KakaCache;
99
import com.im4j.kakacache.rxjava.common.utils.LogUtils;
10-
import com.im4j.kakacache.rxjava.netcache.strategy.FirstCacheStrategy;
10+
import com.im4j.kakacache.rxjava.netcache.strategy.CacheStrategy;
1111

1212
import retrofit2.Retrofit;
13-
import retrofit2.converter.gson.GsonConverterFactory;
1413
import rx.android.schedulers.AndroidSchedulers;
1514
import rx.schedulers.Schedulers;
1615

@@ -59,7 +58,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
5958
*/
6059
void demoForNormal() {
6160
service.listReposForNormal("alafighting")
62-
.compose(KakaCache.transformer(KEY_CACHE, new FirstCacheStrategy()))
61+
.compose(KakaCache.transformer(KEY_CACHE, CacheStrategy.FirstCache))
6362
.subscribeOn(Schedulers.io())
6463
.observeOn(AndroidSchedulers.mainThread())
6564
.subscribe(data -> {

library/src/main/java/com/im4j/kakacache/rxjava/CACHE.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.im4j.kakacache.rxjava;
22

33
import com.im4j.kakacache.rxjava.netcache.strategy.CacheStrategy;
4-
import com.im4j.kakacache.rxjava.netcache.strategy.FirstCacheStrategy;
54

65
import java.lang.annotation.Documented;
76
import java.lang.annotation.Retention;
@@ -31,6 +30,6 @@
3130
* 缓存策略
3231
* @return
3332
*/
34-
Class<? extends CacheStrategy> strategy() default FirstCacheStrategy.class;
33+
CacheStrategy strategy() default CacheStrategy.FirstCache;
3534

3635
}

library/src/main/java/com/im4j/kakacache/rxjava/KakaCache.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import com.im4j.kakacache.rxjava.common.utils.Utils;
1515
import com.im4j.kakacache.rxjava.core.CacheCore;
1616
import com.im4j.kakacache.rxjava.core.disk.converter.KryoDiskConverter;
17-
import com.im4j.kakacache.rxjava.core.disk.converter.SerializableDiskConverter;
1817
import com.im4j.kakacache.rxjava.core.disk.journal.LRUDiskJournal;
1918
import com.im4j.kakacache.rxjava.core.disk.storage.FileDiskStorage;
2019
import com.im4j.kakacache.rxjava.core.memory.journal.LRUMemoryJournal;

library/src/main/java/com/im4j/kakacache/rxjava/core/disk/journal/BasicDiskJournal.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ final LiteOrm getDb() {
2727
}
2828

2929
@Override
30-
public final CacheEntry get(String key) {
30+
public CacheEntry get(String key) {
3131
if (Utils.isEmpty(key)) {
3232
throw new NullException("key == null");
3333
}

library/src/main/java/com/im4j/kakacache/rxjava/netcache/retrofit/CacheInfo.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static CacheInfo get(Annotation[] annotations) {
3030

3131
private String key;
3232
private boolean enable;
33-
private Class<? extends CacheStrategy> strategy;
33+
private CacheStrategy strategy;
3434

3535
public CacheInfo() {
3636
}
@@ -40,7 +40,7 @@ public String toString() {
4040
return "CacheInfo{" +
4141
"key='" + key + '\'' +
4242
", enable=" + enable +
43-
", strategy=" + strategy.getSimpleName() +
43+
", strategy=" + strategy.name() +
4444
'}';
4545
}
4646

@@ -60,11 +60,11 @@ public void setEnable(boolean enable) {
6060
this.enable = enable;
6161
}
6262

63-
public Class<? extends CacheStrategy> getStrategy() {
63+
public CacheStrategy getStrategy() {
6464
return strategy;
6565
}
6666

67-
public void setStrategy(Class<? extends CacheStrategy> strategy) {
67+
public void setStrategy(CacheStrategy strategy) {
6868
this.strategy = strategy;
6969
}
7070
}

library/src/main/java/com/im4j/kakacache/rxjava/netcache/retrofit/KakaRxCallAdapterFactory.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.im4j.kakacache.rxjava.common.utils.LogUtils;
55
import com.im4j.kakacache.rxjava.common.utils.Utils;
66
import com.im4j.kakacache.rxjava.netcache.ResultData;
7-
import com.im4j.kakacache.rxjava.netcache.strategy.FirstCacheStrategy;
7+
import com.im4j.kakacache.rxjava.netcache.strategy.CacheStrategy;
88

99
import java.lang.annotation.Annotation;
1010
import java.lang.reflect.ParameterizedType;
@@ -108,11 +108,11 @@ public <R> Observable<?> adapt(Call<R> call) {
108108
LogUtils.log("fileName="+info.getKey());
109109

110110
if (info.getStrategy() == null) {
111-
info.setStrategy(FirstCacheStrategy.class);
111+
info.setStrategy(CacheStrategy.FirstCache);
112112
}
113113

114114
return callAdapter.doAdaptUnwrap(call)
115-
.compose(KakaCache.transformer(info.getKey(), Utils.newInstance(info.getStrategy())));
115+
.compose(KakaCache.transformer(info.getKey(), info.getStrategy()));
116116
}
117117

118118
return callAdapter.doAdaptUnwrap(call);

library/src/main/java/com/im4j/kakacache/rxjava/netcache/strategy/BasicCacheStrategy.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

library/src/main/java/com/im4j/kakacache/rxjava/netcache/strategy/CacheAndRemoteStrategy.java

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,70 @@
11
package com.im4j.kakacache.rxjava.netcache.strategy;
22

3+
import com.im4j.kakacache.rxjava.KakaCache;
4+
import com.im4j.kakacache.rxjava.common.utils.LogUtils;
35
import com.im4j.kakacache.rxjava.netcache.ResultData;
6+
import com.im4j.kakacache.rxjava.netcache.ResultFrom;
47

58
import rx.Observable;
9+
import rx.schedulers.Schedulers;
610

711
/**
812
* 缓存策略
9-
* @version alafighting 2016-06
13+
* @version alafighting 2016-07
1014
*/
11-
public interface CacheStrategy {
15+
public enum CacheStrategy {
16+
/** 优先缓存 */
17+
FirstCache{
18+
@Override
19+
public <T> Observable<ResultData<T>> execute(String key, Observable<T> source) {
20+
Observable<ResultData<T>> cache = loadCache(key);
21+
Observable<ResultData<T>> remote = loadRemote(key, source);
22+
return Observable.concat(cache, remote)
23+
.firstOrDefault(null, it -> it.data != null)
24+
.subscribeOn(Schedulers.io());
25+
}
26+
},
27+
/** 优先服务器 */
28+
FirstRemote{
29+
@Override
30+
public <T> Observable<ResultData<T>> execute(String key, Observable<T> source) {
31+
Observable<ResultData<T>> cache = loadCache(key);
32+
Observable<ResultData<T>> remote = loadRemote(key, source);
33+
return Observable.concat(remote, cache)
34+
.firstOrDefault(null, it -> it.data != null)
35+
.subscribeOn(Schedulers.io());
36+
}
37+
},
38+
/** 先缓存,后网络 */
39+
CacheAndRemote{
40+
@Override
41+
public <T> Observable<ResultData<T>> execute(String key, Observable<T> source) {
42+
Observable<ResultData<T>> cache = loadCache(key);
43+
Observable<ResultData<T>> remote = loadRemote(key, source);
44+
return Observable.concat(cache, remote)
45+
.filter(result -> result.data != null)
46+
.onBackpressureBuffer()
47+
.subscribeOn(Schedulers.io());
48+
}
49+
};
1250

13-
<T> Observable<ResultData<T>> execute(String key, Observable<T> source);
51+
52+
53+
protected <T> Observable<ResultData<T>> loadCache(String key) {
54+
return KakaCache.manager().load(key).map(it -> {
55+
LogUtils.debug("loadCache result="+it);
56+
return new ResultData<>(ResultFrom.Cache, key, (T) it);
57+
});
58+
}
59+
60+
protected <T> Observable<ResultData<T>> loadRemote(String key, Observable<T> source) {
61+
return source.map(it -> {
62+
LogUtils.debug("loadRemote result="+it);
63+
KakaCache.manager().save(key, it).subscribe(status -> LogUtils.log("save status => "+status) );
64+
return new ResultData<>(ResultFrom.Remote, key, it);
65+
});
66+
}
67+
68+
public abstract <T> Observable<ResultData<T>> execute(String key, Observable<T> source);
1469

1570
}

0 commit comments

Comments
 (0)