定義
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))