今天學習了建造者模式,核心就是構建和表示分離。若是一個對象組成部分相對穩定,構建過程變幻無窮,則其能夠採用建造者模式。ide
建造者模式的核心思想:構建和表示分離學習
在建造者模式中,分爲三個部分:指導者,虛擬的建造者,實際的建造者測試
指導者:指導建造者進行建造,通用方法爲構造方法ui
虛擬建造者:抽象出對象所必須的方法 將建造過程抽象化spa
實際的建造者:也能夠稱之爲真實的建造者 能夠進行對象的逐步建造設計
在這裏我以電腦的構建爲例,寫了一個真實樣例,以便方便本身理解建造者模式;code
在個人設計中:對象
1.Engineer充當的是指導者的角色--->Directorblog
2.Firm充當的是抽象的建造者,聲明瞭建造者所必須的一些方法或者步驟---->Builderget
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);
核心是本身指導本身進行對象的建造。