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的链表