Android設計模式之(2)----Builder模式

Builder模式


Builder模式使用鏈式結構創建複雜對象,將過程與結果分開,創建過程中可以自行組合。

使用場景

  • 一個對象,不同組合,不同順序生成不同的結果

優點:封裝性更規範,程序調用不用關係內部細節,注重結果即可
缺點:如果builder對象過多,會加大內存消耗

public class TabInfoBean {

    private int count;//Tab的個數 必選
    private int currentTab;//默認選中的tab 必選
    private String[] tabText;//文字必選


    private int normalResId;//可選
    private int selectResId;//可選
    private int normalTextColor;//可選
    private int selectTextColor;//可選
    private int normalTextSizeSp;//可選
    private int selectTextSizeSp;//可選


    private TabInfoBean(TabInfoBuilder builder) {
        this.tabText = builder.tabText;
        this.count = builder.count;
        this.currentTab = builder.currentTab;

        this.normalResId = builder.normalResId;
        this.selectResId = builder.selectResId;

        this.normalTextColor = builder.normalTextColor;
        this.selectTextColor = builder.selectTextColor;
        this.normalTextSizeSp = builder.normalTextSizeSp;
        this.selectTextSizeSp = builder.selectTextSizeSp;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getCurrentTab() {
        return currentTab;
    }

    public void setCurrentTab(int currentTab) {
        this.currentTab = currentTab;
    }

    public int getNormalResId() {
        return normalResId;
    }

    public void setNormalResId(int normalResId) {
        this.normalResId = normalResId;
    }

    public int getSelectResId() {
        return selectResId;
    }

    public void setSelectResId(int selectResId) {
        this.selectResId = selectResId;
    }

    public int getNormalTextColor() {
        return normalTextColor;
    }

    public void setNormalTextColor(int normalTextColor) {
        this.normalTextColor = normalTextColor;
    }

    public int getSelectTextColor() {
        return selectTextColor;
    }

    public void setSelectTextColor(int selectTextColor) {
        this.selectTextColor = selectTextColor;
    }

    public String[] getTabText() {
        return tabText;
    }

    public void setTabText(String[] tabText) {
        this.tabText = tabText;
    }


    public int getNormalTextSizeSp() {
        return normalTextSizeSp;
    }

    public void setNormalTextSizeSp(int normalTextSizeSp) {
        this.normalTextSizeSp = normalTextSizeSp;
    }

    public int getSelectTextSizeSp() {
        return selectTextSizeSp;
    }

    public void setSelectTextSizeSp(int selectTextSizeSp) {
        this.selectTextSizeSp = selectTextSizeSp;
    }

    public static class TabInfoBuilder {
        private int count;
        private int currentTab;
        private String[] tabText;

        private int normalResId;
        private int selectResId;
        private int normalTextColor;
        private int selectTextColor;
        private int normalTextSizeSp;//可選
        private int selectTextSizeSp;//可選

        public TabInfoBuilder(String[] tabText, int count, int currentTab) {
            this.tabText = tabText;
            this.count = count;
            this.currentTab = currentTab;
        }

        public TabInfoBuilder setNormalResId(int normalResId) {
            this.normalResId = normalResId;
            return this;
        }

        public TabInfoBuilder setSelectResId(int selectResId) {
            this.selectResId = selectResId;
            return this;
        }

        public TabInfoBuilder setNormalTextColor(int normalTextColor) {
            this.normalTextColor = normalTextColor;
            return this;
        }

        public TabInfoBuilder setSelectTextColor(int selectTextColor) {
            this.selectTextColor = selectTextColor;
            return this;
        }

        public TabInfoBuilder setNormalTextSizeSp(int size) {
            this.normalTextSizeSp = size;
            return this;
        }

        public TabInfoBuilder setSelectTextSizeSp(int size) {
            this.selectTextSizeSp = size;
            return this;
        }


        public TabInfoBean build() {
            return new TabInfoBean(this);
        }
    }
}

調用方式


  String[] name={"我","是","誰"};
        TabInfoBean.TabInfoBuilder tabInfoBuilder=new TabInfoBean.TabInfoBuilder(name,5,0);
       /* TabInfoBean tabInfoBean=tabInfoBuilder
                .setNormalResId()
                .setSelectResId()
                .setNormalTextColor()
                .setSelectTextColor()
                .setNormalTextSizeSp()
                .setSelectTextSizeSp()
                .build();*/

github代碼地址

發佈了44 篇原創文章 · 獲贊 12 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章