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();*/