坚持不懈,不断学习
建造模式解决的痛点
- 不优雅
- 不方便阅读
new Label(0,1,0,1,0,2);
- 容易出错(赋值后再进行更改)
Label label1=new Label();
label.setWater(0);
label.setWater(2);
场景引入
只是举例(可能不符合实际场景):
假设下面Label是某公司的营养标签
Class Label{
Integer water;
Integer sodium; // 钠元素
Integer protein;// 蛋白质
Integer VA; // 维生素A
Integer VB; // 维生素B
Integer VC; // 维生素C
}
我生产了一瓶纯水(只有水)
我生产了一瓶饮料(有水、维生素A)
我生产了一包肉(有水、蛋白质、维生素C)
那么你会怎么设计这个类?
第一种方案
Class Label{
Integer water;
Integer sodium; // 钠元素
Integer protein;// 蛋白质
Integer VA; // 维生素A
Integer VB; // 维生素B
Integer VC; // 维生素C
public Label(Integer Water){
this.water=water;
}
public Label(Integer Water,Integer VA){
this.water=water;
this.VA=VA;
}
public Label(Integer Water,Integer protein,Integer VC){
this.water=water;
this.protein=protein;
this.VC=VC;
}
}
一看,可以解决上面的问题。又一看,不优雅(优雅的代码,自己看着也舒服),假如新增加一个牛奶(水、蛋白质、维生素A)怎么办?构造方法排列组合()。
第二种方案
Class Label{
Integer water;
Integer sodium; // 钠元素
Integer protein;// 蛋白质
Integer VA; // 维生素A
Integer VB; // 维生素B
Integer VC; // 维生素C
public Label(Integer Water,Integer protein,Integer VA,Integer VB,Integer VC){
this.water=water==null? 0: water;
this.protein=protein==null? 0: protein;
this.VA=VA==null? 0: VA;
this.VB=VB==null? 0: VB;
this.VC=VC==null? 0: VC;
}
}
一看,可以解决上面的问题。又一看,不优雅(优雅的代码,自己看着也舒服)
看看实际怎么使用的?
new Label(0,0,0,0,0,0,0,0,0,0,0,0,5,1,2,5,0,0,1,0,0);
new Label(0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
不优雅
第三种方案
JavaBean
Class Label{
Integer water;
Integer sodium; // 钠元素
Integer protein;// 蛋白质
Integer VA; // 维生素A
Integer VB; // 维生素B
Integer VC; // 维生素C
public Label(){}
public void setWater(Integer water){
this.water=water;
}
public void setSodium(Integer sodium){
this.sodium=sodium;
}
public void setProtein(Integer protein){
this.protein=protein;
}
public void setVA(Integer VA){
this.VA=VA;
}
public void setVB(Integer VB){
this.VB=VB;
}
public void setVC(Integer VC){
this.VC=VC;
}
}
你猜猜什么问题?不优雅。
标签:VA,建造,模式,Label,water,Integer,protein,public From: https://www.cnblogs.com/handsometaoa/p/17252755.html