java设计模式建造_java设计模式-建造者模式
建造者模式:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創造不同的表示。
建造者模式將一個產品的內部表象和產品的生成過程分割開來,建造對象的時候只需要指定需要建造的類型,而不必了解具體的建造過程。
一個玩具工廠,工人們建造新的玩具人時,需要逐個安裝各個部分,種類有胖虎和小夫。萬一粗心大意忘記裝了某個部分,就出現了不合格的玩具,缺胳膊少腿。
為了減少次品率,老板引入了一臺機器,設定好程序后,工人只要選擇制造的玩具種類,按下開關之后機器自動就去裝配對應的玩具。
代碼結構圖如下:
用代碼來表示就是====>>
首先是一個建造人物的接口(機器類,作為一個制造者,對玩具而言是個上帝般的角色,展示了裝配一個玩具的各個過程):
package com.hy.bulider;
public class God {
private IPerson person;
public God(IPerson person) {
this.person = person;
}
public void createPerson() {
person.buildHead();
person.buildBody();
person.buildArms();
person.buildHands();
person.buildLegs();
person.buildFoots();
System.out.println("合成了一個"+person);
}
}
然后是玩具的接口類和兩個具體的玩具實現類(機器程序設定的程序,規定了作為一個玩具必須要有的零件):
package com.hy.bulider;
public interface IPerson {
public void buildHead();
public void buildBody();
public void buildArms();
public void buildHands();
public void buildLegs();
public void buildFoots();
public String toString();
}
package com.hy.bulider;
public class Fatter implements IPerson{
public void buildHead() {
System.out.println("組成胖頭部");
}
public void buildBody() {
System.out.println("組成胖身體");
}
public void buildArms() {
System.out.println("組成胖胳膊");
}
public void buildHands() {
System.out.println("組成胖手");
}
public void buildLegs() {
System.out.println("組成胖腿");
}
public void buildFoots() {
System.out.println("組成胖腳");
}
@Override
public String toString() {
return "胖虎";
}
}
package com.hy.bulider;
public class Thinner implements IPerson{
public void buildHead() {
System.out.println("組成瘦頭部");
}
public void buildBody() {
System.out.println("組成瘦身體");
}
public void buildArms() {
System.out.println("組成瘦胳膊");
}
public void buildHands() {
System.out.println("組成瘦手");
}
public void buildLegs() {
System.out.println("組成瘦腿");
}
public void buildFoots() {
System.out.println("組成瘦腳");
}
public String toString() {
return "小夫";
}
}
最后是測試類:
package com.hy.bulider;
public class Test {
public static void main(String[] args) {
Thinner thinner = new Thinner();
God god = new God(thinner);
god.createPerson();
Fatter fatter = new Fatter();
god = new God(fatter);
god.createPerson();
}
}
這樣工人工作的時候只需要選擇特定的模型,然后運行機器就可以得到合格的玩具,而且不必關心裝配玩具的具體細節。即使后面新增了大雄靜香等需求訂單,只需要在機器中設定裝配程序就可以正常工作。
另外,如果有更多的細節的實現,比如臉部的眼睛鼻子等等,則需要綜合權衡接口類中的構造方法是否足夠普遍,別的具體構造者實現是否需要這些方法。
建造者模式的結構圖如下:
Bulider是為創建一個Product對象的各個部件指定的抽象接口。
ConcreteBuilder是具體的建造者,實現Builder接口構造和裝配各個部件。
Product指具體的角色。
Director指揮者,構建正在使用Builder接口的對象。
建造者模式主要應用的場景:創建一些復雜的對象,這些對象內部構建間的建造順序是穩定的,但對象內部的構建通常面臨著復雜的變化。即:當創建復雜對象的算法應該獨立于該對象的組成部分以及他們的裝配方法時適用建造者模式。
建造者模式好處:
1、最主要的好處是,使得對象的構建與表示分離,可以讓表示獨立于過程而獨立的變化,并且客戶端不再需要關心具體的構建過程和表示。
2、由于固定的表示由具體的制造者提供,所以要重復制造幾個表示相同的對象的時候,只需要讓指揮者控制制造者再進行一次即可。
模板方法模式,遇到一系列步驟構成的過程需要執行,這個過程從高層次上看是相同的,這時把不變行為搬移到父類(超類),提供了一個代碼復用的平臺,去除了類中的重復代碼來體現它的優勢。也就是說,當不變和可變的行為在方法的子類實現中混合在一起的時候,把這些行為搬移到單一的地方(父類/超類),幫助子類擺脫重復的不變行為的糾纏。
建造者模式的對象構建過程和這個有些類似,對象的接口類中定義了對象普遍的構造方法,具體的對象構造者建造過程和細節。不同的地方在于建造者模式中對象的接口類只定義對象普遍的構造方法,在建造類中定義了對象的構造流程。若是沒有構造者類,建造者模式可以看作一個模板方法模式。
模板方法模式是行為型模式,不僅描述對象或類的模式,還描述它們之間的通信方式,實現過程中采用繼承機制在類間分派行為。建造者模式是創建型模式,抽象了實例化過程。在實現方法的骨架層次上,建造者模式中使用的是組合的方式。所以建造者更靈活,而且也可以避免由繼承而引發的各種問題。
總結
以上是生活随笔為你收集整理的java设计模式建造_java设计模式-建造者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java树形菜单_Java构建树形菜单
- 下一篇: .net html转义字符,asp.ne