0,意義
首頁業務上有多個彈框,爲了避免嵌套需要實現方式。又不想引入RxJava,就自己做了一個簡要的實現
1-1,實現
public class ChainManager {
private OnSubmit head;
/**
* 會依次執行 OnChain中的內容
*
* @param chainArray 一個個的回調
*/
public static void start(OnSubmit... chainArray) {
ChainManager chainManager = new ChainManager();
chainManager.buildInner(chainArray);
chainManager.next();
}
private void buildInner(OnSubmit... chainArray) {
if (null != chainArray && chainArray.length > 0) {
OnSubmit result = chainArray[0];
// 構建鏈表
OnSubmit temp = result;
for (int i = 1; i < chainArray.length; i++) {
temp.setNext(chainArray[i]);
temp = temp.next();
}
// 賦值
head = result;
}
}
public void next() {
if (null != head) {
OnSubmit current = head;
head = head.next();
current.onProceed(this);
}
}
}
public abstract class OnSubmit {
private OnSubmit next;
protected OnSubmit next() {
return next;
}
protected void setNext(OnSubmit next) {
this.next = next;
}
public abstract void onProceed(ChainManager chain);
}
1-2,使用
ChainManager.start(new OnSubmit() {
@Override
public void onProceed(ChainManager chain) {
LogUtil.v("1");
chain.next();
}
}, new OnSubmit() {
@Override
public void onProceed(ChainManager chain) {
LogUtil.v("2");
}
}, new OnSubmit() {
@Override
public void onProceed(ChainManager chain) {
LogUtil.v("3");
}
});
2,優化方向
由於是簡要的實現,因此存在一些可優化方向:
問題1,大量創建OnSubmit對象,
優化方案:使用static量將要回收的進行保持,以便下次使用;
優化案例:參考Handler的Message的鏈表