正常情況下,宣告乙個user類,然後列出幾條屬性,這個時候ide會提示說缺少初始化方法。然後就直接構建構造方法,像這樣
public class user
}
從上面**可以看出,雖然只有4個屬性,但是構造方法的引數已經顯得很累贅了,這個時候就需要用到builder模式先來簡化引數的個數。
在user類中建乙個靜態builder類。注意,只需設定一兩個屬性為final型別(通常是作為唯一識別的標誌)
具有final型別的屬性新增構造方法,其他的屬性為返回值為builder型別的普通方法。
public static class userbuilder1
//返回值型別為userbuilder1的,方法名為age的方法
public userbuilder1 age(int age)
public userbuilder1 mouth(string mouth)
public userbuilder1 eyes(string eyes)
}
此時**1中的構造方法可以被替換為builder型別。 再加上get方法獲取屬性的值
//引數這裡不再是很多個單獨的屬性,而是物件,這也符合物件導向的邏輯
public user(userbuilder1 userbuilder1)
//加上get方法為了以後獲得當前物件某個屬性的值
public int getage()
public string geteyes()
public string getmouth()
public string getname()
以上的步驟僅是在構造方法的引數上進行了封裝,簡化引數的個數。但是userbuilder1類的最本質目的是————構建user類,並且自由地訪問它的屬性,如果是宣告屬性不建立build(),物件就無法正確建立和被訪問。 所以我們在userbuilder中宣告build方法
public user build()
這裡的this是userbuilder1本身,對應的是 public user(userbuilder1 userbuilder1)
另外如果有什麼線性安全的要求,就加一些判斷條件
public user build()
return user;
}
建乙個main方法,體驗鏈式呼叫的便利
public static void main(string args)
以下是全部**,自行體會兩者的效果
效果一(鏈式+builder)
public class userdemo
public int getage()
public string geteyes()
public string getmouth()
public string getname()
public static class userbuilder1
//返回值型別為userbuilder1的,名稱的age的方法
public userbuilder1 age(int age)
public userbuilder1 mouth(string mouth)
public userbuilder1 eyes(string eyes)
public userdemo build()
}public static void main(string args)
}
效果二(沒有鏈式)public class userdemo2
public int getage()
public string geteyes()
public string getmouth()
public string getname()
public static void main(string args)
}
Builder 建造者模式
模式定義 builder模式很好地將乙個複雜物件的建立與該物件內部的各個部件的組裝分離開來。它和 abstract factory模式有相似的地方,但是abstract factory主要提供了乙個建立一些列相關或相互依賴的物件的介面,無需知道指定他們具體的類 生產者 而builder模式著重於部件...
建造者模式(Builder)
工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性,其實建造者模式就是前面抽象工廠模式和最後的test結合起來得到的。我們看一下 還和前面一樣,乙個sender介面,兩個實現類mailsender和smssende...
建造者模式(Builder)
4 建造者模式 builder 工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性,其實建造者模式就是前面抽象工廠模式和最後的test結合起來得到的。我們看一下 建造者類如下 抽象產品類,使用了模板方法模式,不同產...