設(shè)計(jì)模式-Builder設(shè)計(jì)模式

定義

Builder模式可以將一個(gè)類的構(gòu)建和表示進(jìn)行分離

NavigationBar實(shí)踐

1.目的效果

 new DefaultNavigation.Builder(this)
                .setTitle("所有圖片")
                .setLeftOnClickListener(this)
                .create();

2.分析

navigation.png

3.代碼(從項(xiàng)目中抽取)

/**
 * 項(xiàng)目名稱:joke
 * 類描述:
 * 創(chuàng)建人:woochen123
 * 創(chuàng)建時(shí)間:2017/5/17 23:41
 */
public class DefaultNavigation extends AbsNavigationBar<DefaultNavigation.Builder.NavigationParams> {
    public DefaultNavigation(Builder.NavigationParams params) {
        super(params);
    }

    @Override
    public int bindLayoutId() {
        return R.layout.default_navigation;
    }

    @Override
    public void applyView() {
        // 給我們的導(dǎo)航條綁定資源
        setImageResource(R.id.iv_left, getParams().leftIconRes);
        setImageResource(R.id.iv_right, getParams().rightIconRes);
        setImageResource(R.id.iv_right_icon, getParams().textRightIconRes);
        setText(R.id.tv_title, getParams().title);
        setText(R.id.left_tv, getParams().leftTv);
        setText(R.id.tv_right, getParams().rightTv);
        setBackgroundColor(R.id.title_bar, getParams().bgColor);
        setOnClickListener(R.id.iv_left, getParams().leftOnClickListener);
        setOnClickListener(R.id.tv_right, getParams().rightOnClickListener);
    }


    /**
     * 設(shè)置背景
     * @param title_bar
     * @param bgColor
     */
    private void setBackgroundColor(int title_bar, int bgColor) {
        ViewGroup view = findViewById(title_bar);
        if (view != null) {
            view.setBackgroundColor(bgColor);
        }
    }

    public static class Builder extends AbsNavigationBar.Builder {
        public NavigationParams params;

        public Builder(Context context, ViewGroup parent) {
            super(context, parent);
            params = new NavigationParams(context,parent);
        }

        public Builder(Context context) {
            super(context,null);
            params = new NavigationParams(context,null);
        }


        public Builder setTitle(String title) {
            params.title = title;
            return this;
        }

        public Builder setRight(String right) {
            params.rightTv = right;
            return this;
        }

        public Builder setLeft(String left) {
            params.leftTv = left;
            return this;
        }

        public Builder setLeftIcon(int iconRes) {
            params.leftIconRes = iconRes;
            return this;
        }


        public Builder setRightIcon(int iconRes) {
            params.rightIconRes = iconRes;
            return this;
        }

        public Builder setTitleBackgroundColor(int bgColor) {
            params.bgColor = bgColor;
            return this;
        }

        public Builder setLeftOnClickListener(View.OnClickListener onClickListener) {
            params.leftOnClickListener = onClickListener;
            return this;
        }

        public Builder setRightOnClickListener(View.OnClickListener onClickListener) {
            params.rightOnClickListener = onClickListener;
            return this;
        }

        @Override
        public <T extends AbsNavigationBar> T create() {
            DefaultNavigation defaultNavigation = new DefaultNavigation(params);
            return (T) defaultNavigation;
        }

        public static class NavigationParams extends AbsNavigationBar.Builder.NavigationParams {
            //標(biāo)題
            public String title;
            //左邊圖片資源
            public int leftIconRes;
            //右邊圖片資源
            public int rightIconRes;
            //左邊的點(diǎn)擊事件
            public View.OnClickListener leftOnClickListener;
            //右邊的點(diǎn)擊事件
            public View.OnClickListener rightOnClickListener;
            public String leftTv;
            public String rightTv;
            public int bgColor;

            public NavigationParams(Context context, ViewGroup parent) {
                super(context, parent);
            }
        }

    }
}

4.總結(jié)

1.目標(biāo)類的實(shí)例化操作實(shí)際上交給了Builder對(duì)象來完成,目標(biāo)對(duì)象只暴露很少的api給開發(fā)者來調(diào)用(將目標(biāo)類的構(gòu)建抽離出來,將只有在目標(biāo)類被實(shí)例化的時(shí)候才能配置或者只能配置一次的各項(xiàng)參數(shù)隱藏起來)

5.優(yōu)點(diǎn)

1.有利于擴(kuò)展(builder對(duì)象是獨(dú)立的,可以很方便的進(jìn)行api的增加和修改,而不會(huì)影響目標(biāo)類的過多改動(dòng))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評(píng)論 18 399
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評(píng)論 6 342
  • 1 場(chǎng)景問題# 1.1 繼續(xù)導(dǎo)出數(shù)據(jù)的應(yīng)用框架## 在討論工廠方法模式的時(shí)候,提到了一個(gè)導(dǎo)出數(shù)據(jù)的應(yīng)用框架。 對(duì)于...
    七寸知架構(gòu)閱讀 6,155評(píng)論 1 64
  • 必須得承認(rèn),認(rèn)識(shí)自己從來都是一件非常難的事情,我們只能在遇到事情的時(shí)候不斷地去認(rèn)識(shí)自己,了解自己。 昨天生氣時(shí),寫...
    曾琦閱讀 397評(píng)論 2 1

友情鏈接更多精彩內(nèi)容