一、建立模式涉及角色
1.抽象建立者角色(Builder):為建立一個産品對象的各個元件指定抽象接口。
2.具體建立者角色(ConcreteBuilder):實作抽象builder接口以構造和裝配産品的各個元件,定義并明确它所建立的表示,并提供一個檢索産品的接口。 包含構造和建立一個産品的所有代碼。
3.指導者(Director):構造一個使用Builder接口的對象,指導建構過程。
4.産品(Product):表示被構造的複雜對象。ConcreteBuilder建立改成産品
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90zdaVHbXVWMoJzY2ZkMaZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TM3MzM1EDM0EzNwkDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
二、在什麼情況下使用建造模式
1. 需要生成的産品對象有複雜的内部結構,每一個内部成分本身可以是對象,也可以僅僅是一個對象(即産品對象)的一個組成部分。 2. 建立複雜對象的算法應該獨立于該對象的組成部分以及他們的裝配方式時。 3.構造過程必須允許被構造的對象有不同的表示時。
三、執行個體代碼
public interface Builder { public void createPartA(); public void createPartB(); public void createPartC(); public Food createFood (); }
public class ChilderFoodBuilder implements Builder { Food food ; public ChilderFoodBuilder() { this . food = new Food(); } @Override public void createPartA() { System. out .println( "建立的是兒童餐-A部分" ); } @Override public void createPartB() { System. out .println( "建立的是兒童餐-B部分" ); } @Override public void createPartC() { System. out .println( "建立的是兒童餐-C部分" ); } @Override public Food createFood() { return food ; } }
public class WomenFoodBuilder implements Builder { Food food ; public WomenFoodBuilder() { this . food = new Food(); } @Override public void createPartA() { System. out .println( "建立的是适合女士的減肥餐-A" ); } @Override public void createPartB() { System. out .println( "建立的是适合女士的減肥餐-B" ); } @Override public void createPartC() { System. out .println( "建立的是适合女士的減肥餐-C" ); } @Override public Food createFood() { return food ; } }
public class Food { private String partA ; private String partB ; private String partC ; public String getPartA() { return partA ; } public void setPartA(String partA) { this . partA = partA; } public String getPartB() { return partB ; } public void setPartB(String partB) { this . partB = partB; } public String getPartC() { return partC ; } public void setPartC(String partC) { this . partC = partC; } }
public class Director { public Food createDiffTypeFood(Builder bu){ bu.createPartA(); bu.createPartB(); bu.createPartC(); return bu.createFood(); } }
public class Test { public static void main(String args[]) { Director director = new Director(); director.createDiffTypeFood( new ChilderFoodBuilder()); director.createDiffTypeFood( new WomenFoodBuilder()); } }