責任鏈模式_簡要實現

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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章