builder模式可以看成是鏈式調用,如,是builder不是那個bunder
new AlertDialog.Builder(this)
? ? ? ? ? ? ? ? .setTitle("對話框")
? ? ? ? ? ? ? ? .setMessage("測試")
? ? ? ? ? ? ? ? .setIcon(R.mipmap.ic_launcher)
? ? ? ? ? ? ? ? .create()
? ? ? ? ? ? ? ? .show();
以及通知的鏈式調用。
1.變種的builder模式,可以用于多種品類屬性命名等。在android中一般使用變種的builder就夠了。
屬性多的時候,使用set,get第二種方式,是解決了上面的問題,但是會讓調用set方法的對象重復了20次或更多,同時也屬于不連續的情況,該類的其他屬性在被創建之后被修改,給程序帶來了一些不安全性,像下面”
//屬性越多,調用者(商品)重復越多
商品.setX1("");
商品.setX2("");
商品.setX3("");
.....
//修改已經設置好了的某個屬性
商品.setX1("修改后的屬性");
public class A {
? ? private final String mX1;
? ? private int mX2;
? ? private A(Builder builder) {
? ? ? ? mX1 = builder.mX1;
? ? ? ? mX2 = builder.mX2;
? ? }
? ? public static final class Builder {
? ? ? ? private final String mX1;
? ? ? ? private int mX2;
? ? ? ? public Builder() {
? ? ? ? }
? ? ? ? public Builder setX1(String val) {
? ? ? ? ? ? mX1 = val;
? ? ? ? ? ? return this; //返回的Builder對象,通過第一個返回的Build對象,能夠去調用setX2.通過第二個返回的Builder去調用build(),build方法返回A的對象,并在啟動也傳入了builder對象。就調用到了A的構造函數中,去復制類A相關的屬性了。
? ? ? ? }
? ? ? ? public Builder setX2(int val) {
? ? ? ? ? ? mX2 = val;
? ? ? ? ? ? return this;
? ? ? ? }
? ? ? ? public A build() {
? ? ? ? ? ? return new A(this);
? ? ? ? }
? ? }
}
//使用
new A.Builder()
? ? ? .setX1()
? ? ? .setX2()
? ? ? .build();
?
? ? ? ? ??