创建型模式之一
定义:将一个复杂的对象的构建和它的表示分开,使得同样的构建过程可以创建不同的表示。
使用场景:
1,相同的方法,不同的执行顺序,产生的事件结果不一样。
2,多个部件和零件,都可以装配到一个对象中,运行产生的结果又不相同。
3,某类非常复杂,参数过多并且很多参数都有默认值。或者某类中的调用顺序不同产生的作用不同。
优点:
1,将配置从目标类隔离出来,避免了过多的setter()方法,容易扩展。
2,良好的封装性,让调用者不必知道内部组成的细节
缺点:会产生多余的Builder对象。
简单实现:
/**
* 美女类
*/
public class Belle {
//隔离霜
private String mSunScreen;
//粉底
private String mFoundation;
//眼影
private String EyeShadows;
//口红
private String mLmipstick;
public Belle(Builder builder) {
this.mSunScreen = builder.mSunScreen;
this.mFoundation = builder.mFoundation;
this.EyeShadows = builder.mEyeShadows;
this.mLmipstick = builder.mLmipstick;
}
@Override
public String toString() {
return "Belle{" +
"mSunScreen='" + mSunScreen + '\'' +
", mFoundation='" + mFoundation + '\'' +
", EyeShadows='" + EyeShadows + '\'' +
", mLmipstick='" + mLmipstick + '\'' +
'}';
}
public static class Builder {
private String mSunScreen = "SunScreen";
private String mFoundation = "Foundation";
private String mEyeShadows = "EyeShadows";
private String mLmipstick = "Lmipstick";
public Builder() {
}
/**
* 隔离霜
*
* @param sunScreen
*/
public Builder setSunScreen(String sunScreen) {
this.mSunScreen = sunScreen;
return this;
}
/***
* 设置粉底
* @param foundation
*/
public Builder setFoundation(String foundation) {
this.mFoundation = foundation;
return this;
}
/**
* 设置眼影
*
* @param eyeshadows
*/
public Builder setEyeShadows(String eyeshadows) {
this.mEyeShadows = eyeshadows;
return this;
}
/**
* 设置口红
*
* @param lmipstick
*/
public Builder setLmipstick(String lmipstick) {
this.mLmipstick = lmipstick;
return this;
}
public Belle build() {
return new Belle(this);
}
}
}