設計模式四--建造者模式 一、定義 將一個複雜對象呢的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 二、優點 封裝性 建造者獨立,容易擴展 三、原理圖 Product代表具體的產品 ConcreteBuilder是這些產品建造過程的一個介面 Builder是這些產品的具體建造實例,實現 ...
設計模式四--建造者模式
一、定義
將一個複雜對象呢的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
二、優點
封裝性
建造者獨立,容易擴展
三、原理圖
Product代表具體的產品
ConcreteBuilder是這些產品建造過程的一個介面
Builder是這些產品的具體建造實例,實現ConcreteBuilder介面
Director包含不同的Builder,負責構造各個產品
四、實例
1、Computer
抽象的電腦類
public abstract class Computer { private String type;//型號 private String cpu; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getCpu() { return cpu; } public void setCpu(String cpu) { this.cpu = cpu; } }
2、T410
繼承了Computer類
代表T410電腦
1 package definition; 2 3 public class T410 extends Computer { 4 private String graphicCard;//顯卡 5 public T410(){ 6 this.setType("ThinkPad T410"); 7 } 8 public String getGraphicCard() { 9 return graphicCard; 10 } 11 public void setGraphicCard(String graphicCard) { 12 this.graphicCard = graphicCard; 13 } 14 15 16 //輸出型號,記憶體和顯卡 17 public String toString() { 18 return "T410 [getType()=" + getType() + ", getCpu()=" + getCpu() + ", graphicCard=" + graphicCard + "]"; 19 } 20 21 }
3、X201
繼承了Computer類
代表X201電腦
1 public class X201 extends Computer { 2 3 public X201() { 4 this.setType("ThinkPad X201"); 5 } 6 7 //顯示型號和cpu 8 public String toString() { 9 return "X201 [getType()=" + getType() + ", getCpu()=" + getCpu() + "]"; 10 } 11 12 }
4、ComputerBuilder
介面類,用於建造電腦
1 public interface ComputerBuilder { 2 void buildCpu();//建造cpu 3 void buildGraphicCard();//建造顯卡 4 5 Computer getResult();//得到建造好的電腦 6 }
5、T410Builder
實現ComputerBuilder介面
T410的具體實現
1 public class T410Builder implements ComputerBuilder { 2 private T410 computer =new T410(); 3 4 public void buildCpu() { 5 computer.setCpu("i5-450"); 6 } 7 8 public void buildGraphicCard(){ 9 computer.setGraphicCard("Nvidia NVS 3100M"); 10 } 11 12 public Computer getResult() { 13 14 return computer; 15 } 16 17 }
6、X201Builder
實現ComputerBuilder介面
X201的具體實現
public class X201Builder implements ComputerBuilder { private X201 computer = new X201(); public void buildCpu() { computer.setCpu("i3-350"); } public Computer getResult() { return computer; } public void buildGraphicCard() { // TODO Auto-generated method stub } }
7、ComputerDirector
Director包含不同的Builder,負責構造各個產品
1 public class ComputerDirector { 2 ComputerBuilder builder; 3 4 //建造T410號機器 5 public T410 constructT410() { 6 builder=new T410Builder(); 7 builder.buildCpu(); 8 builder.buildGraphicCard(); 9 return (T410)builder.getResult(); 10 } 11 12 //建造X201號機器 13 public X201 constructX201() { 14 builder=new X201Builder(); 15 builder.buildCpu(); 16 return (X201)builder.getResult(); 17 } 18 19 }
8、ComputerTest
具體的測試類
1 public class ComputerTest { 2 3 public static void main(String[] args) { 4 ComputerDirector computerDirector=new ComputerDirector(); 5 Computer t410=computerDirector.constructT410(); 6 System.out.println(t410); 7 8 System.out.println("----------------------------"); 9 10 Computer x201=computerDirector.constructX201(); 11 System.out.println(x201); 12 } 13 14 }
五、實驗結果
T410 [getType()=ThinkPad T410, getCpu()=i5-450, graphicCard=Nvidia NVS 3100M]
----------------------------
X201 [getType()=ThinkPad X201, getCpu()=i3-350]