設計模式之建造者模式
今天學習了建造者模式,核心就是構建和表示分離。如果一個對象組成部分相對穩定,構建過程千變萬化,則其可以采用建造者模式。
建造者模式的核心思想:構建和表示分離

在建造者模式中,分為三個部分:指導者,虛擬的建造者,實際的建造者
指導者:指導建造者進行建造,通用方法為構造方法
虛擬建造者:抽象出對象所必須的方法 將建造過程抽象化
實際的建造者:也可以稱之為真實的建造者 可以進行對象的逐步建造
在這里我以電腦的構建為例,寫了一個真實樣例,以便方便自己理解建造者模式;

在我的設計中:
1.Engineer充當的是指導者的角色--->Director
2.Firm充當的是抽象的建造者,聲明了建造者所必須的一些方法或者步驟---->Builder
3.SAMSUNG是真實的建造者,實現了抽象建造者的方法,進行產品的構建---->ConcreteBuilder
4.Computer是產品,最終表現形式
建造者模式的核心思想,構建過程與表現分離,以下是不同的角色的類
Director指導者:
package v3; //工程師指導電腦的生產過程 public class Engineer { public Computer Build(Firm firm){ firm.BuildComputerKeyBoard(); firm.BuildComputerMaster(); firm.BuildComputerMouse(); firm.BuildComputerScreen(); return firm.BuildComputer(); } }
Builder抽象的建造者:
package v3; //廠商 抽象 public abstract class Firm { public abstract void BuildComputerMaster(); public abstract void BuildComputerScreen(); public abstract void BuildComputerMouse(); public abstract void BuildComputerKeyBoard(); public abstract Computer BuildComputer(); }
ConcretBuilder真實的建造者:
package v3; public class SAMSUNG extends Firm { private Computer computer =null; public SAMSUNG() { computer =new Computer(); } @Override public void BuildComputerMaster() { computer.Master="HP 越靈 真的好"; } @Override public void BuildComputerScreen() { computer.Screen="HTC 更亮"; } @Override public void BuildComputerMouse() { computer.Mouse="羅技 三億鼠標的槍戰夢想"; } @Override public void BuildComputerKeyBoard() { computer.Keyboard="真機械鍵盤質感"; } @Override public Computer BuildComputer() { return computer; } }
Product產品:Computer
package v3; //組成部分固定 組成方法急劇變化 public class Computer { public String Master; public String Screen; public String Mouse; public String Keyboard; @Override public String toString() { return "Computer{" + "Master='" + Master + '\'' + ", Screen='" + Screen + '\'' + ", Mouse='" + Mouse + '\'' + ", Keyboard='" + Keyboard + '\'' + '}'; } }
整個建造者模式的測試:
package v3; //組成部分固定 組成方法急劇變化 public class Computer { public String Master; public String Screen; public String Mouse; public String Keyboard; @Override public String toString() { return "Computer{" + "Master='" + Master + '\'' + ", Screen='" + Screen + '\'' + ", Mouse='" + Mouse + '\'' + ", Keyboard='" + Keyboard + '\'' + '}'; } }
執行結果:

然后學習如何對建造者模式進行簡化,將指導者與抽象的建造者合并
指導者與抽象的建造者合并之后的結果是這樣的
package v4; //廠商 抽象 public abstract class Firm { Computer computer=new Computer(); public abstract void BuildComputerMaster(); public abstract void BuildComputerScreen(); public abstract void BuildComputerMouse(); public abstract void BuildComputerKeyBoard(); public Computer BuildComputer(Firm firm){ firm.BuildComputerKeyBoard(); firm.BuildComputerMaster(); firm.BuildComputerScreen(); firm.BuildComputerMouse(); return firm.getComputer(); } public Computer getComputer(){ return computer; } }
最后測試結果的代碼為
Firm firm =new ConcreteFirm(); computer=firm.BuildComputer(firm);
核心是自己指導自己進行對象的建造。
恐懼源于無知,代碼改變世界

浙公網安備 33010602011771號