建造者模式(Builder Pattern)主要用於“分步驟構建一個複雜的對象”,在這其中“分步驟”是一個穩定的算法,而復雜對象的各個部分則經常變化。因此, 建造者模式主要用來解決“對象部分”的需求變化。 這樣可以對對象構造的過程進行更加精細的控制。
package com.shejimoshi.create.Builder;/** * 功能:意圖是將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示* 適用性: * 當創建複雜對象的算法應該獨立於該對象的組成部分以及它們的裝配方式時* 當構造過程必須允許被構造的對像有不同的表示時*/public abstract class PersonBuilder{ //繪畫一個人物需要使用到的工具protected String tool1; protected String tool2; public PersonBuilder(String t1, String t2) { this.tool1 = t1; this.tool2 = t2; } //繪畫頭public abstract void buildHead(); //畫身體public abstract void buildBody(); //畫左腳右腳public abstract void buildArmLeft(); public abstract void buildArmRight(); //畫左手右手public abstract void buildLegLeft(); public abstract void buildLegRight();}我們的抽像生成器派生出相應的子類,用來構造相應的實際使用類型
package com.shejimoshi.create.Builder;/** * 功能:意圖是將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示* 適用性: * 當創建複雜對象的算法應該獨立於該對象的組成部分以及它們的裝配方式時* 當構造過程必須允許被構造的對像有不同的表示時*/public class PersonThinBuilder extends PersonBuilder{ public PersonThinBuilder(String t1, String t2) { super(t1, t2); } @Override public void buildHead() { System.out.println("畫出一個瘦子的頭"); } @Override public void buildBody() { System.out.println("畫出一個瘦子的身體"); } @Override public void buildArmLeft() { System.out.println("畫出瘦子的左臂"); } @Override public void buildArmRight() { System.out.println("畫出瘦子的右臂"); } @Override public void buildLegLeft() { System.out.println("畫出瘦子左腿"); } @Override public void buildLegRight() { System.out.println("畫出瘦子的右腿"); }} package com.shejimoshi.create.Builder;/** * 功能:意圖是將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示* 適用性: * 當創建複雜對象的算法應該獨立於該對象的組成部分以及它們的裝配方式時* 當構造過程必須允許被構造的對像有不同的表示時*/public class PersonFatBuilder extends PersonBuilder{ public PersonFatBuilder(String t1, String t2) { super(t1, t2); } @Override public void buildHead() { System.out.println("畫出一個胖子的頭"); } @Override public void buildBody() { System.out.println("畫出一個胖子的身體"); } @Override public void buildArmLeft() { System.out.println("畫出胖子的左臂"); } @Override public void buildArmRight() { System.out.println("畫出胖子的右臂"); } @Override public void buildLegLeft() { System.out.println("畫出胖子左腿"); } @Override public void buildLegRight() { System.out.println("畫出胖子的右腿"); }}我們的生成器交給指揮者來實現創建的動作
package com.shejimoshi.create.Builder;/** * 功能:創建人物的指揮者*/public class PersonDirector{ private PersonBuilder pb; //傳遞相應的人物創建模型public PersonDirector(PersonBuilder pber) { this.pb = pber; } //創建一個人public void createPerson() { pb.buildHead(); pb.buildBody(); pb.buildArmLeft(); pb.buildArmRight(); pb.buildLegLeft(); pb.buildLegRight(); }}測試案例:
package com.shejimoshi.create.Builder;/** * 功能:客戶端程序*/public class Test{ //創建相應的人物public static void create(PersonBuilder pb) { //借助參數傳過來的模型創建相應的對象PersonDirector pd = new PersonDirector(pb); pd.createPerson(); } public static void main(String []args) { PersonThinBuilder ptb = new PersonThinBuilder("圖像工具", "畫筆"); create(ptb); //創建一個瘦子System.out.println("=============================================================="); PersonFatBuilder pfb = new PersonFatBuilder("圖像工具", "畫筆"); create(pfb); }}運行結果:
畫出一個瘦子的頭畫出一個瘦子的身體畫出瘦子的左臂畫出瘦子的右臂畫出瘦子左腿畫出瘦子的右腿==============================================================畫出一個胖子的頭畫出一個胖子的身體畫出胖子的左臂畫出胖子的右臂畫出胖子左腿畫出胖子的右腿
以上就是java建造者模式,希望對大家學習java程序設計有所幫助。