建造者模式也被稱爲生成器模式,它是建立一個複雜對象的建立型模式,它將構建複雜的對象過程和它的部件解耦,使構建過程和部件的表示分離開來。例如咱們本身要 DIY 一臺臺式計算機。咱們找到 DIY 商家,這是咱們要求這臺計算機的
CPU
、主板、或者其餘部件都是什麼牌子、什麼配置的,這些部件是能夠根據咱們本身的需求來變化的。咱們只須要提供相關部件的牌子和配置就能夠了。對於這種狀況咱們的能夠採用建造者模式,將部件和組裝過程分離,使得構建過程和部件均可以自由拓展,二者之間的耦合也降到最低。react
將一個複雜的對象結構與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。算法
Builder
開始建造。Builder
類,規範產品的組建,通常由子類實現。Builder
類定義的全部方法,而且返回一個組建好的對象。Computer
類,它有3個部件:CPU、主板和內存,並在裏面提供3個方法分別用來設置 CPU
、主板和內存。public class Computer {
private String mCpu;
private String mMainboard;
private String mRam;
public void setmCpu(String mCpu) {
this.mCpu = mCpu;
}
public void setmMainboard(String mMainboard) {
this.mMainboard = mMainboard;
}
public void setmRam(String mRam) {
this.mRam = mRam;
}
}
複製代碼
Builder
類,其裏面提供了安裝 CPU
、主板和內存的方法,以及組裝成計算機的 creact
方法。public abstract class Builder {
public abstract void buildCpu(String cpu);
public abstract void buildMainboard(String mainboard);
public abstract void buildRam(String ram);
public abstract Computer create();
}
複製代碼
Builder
類,MoonComputerBuilder
類用於組裝計算機。public class MoonComputerBuilder extends Builder {
private Computer mComputer = new Computer();
@Override
public void buildCpu(String cpu) {
mComputer.setmCpu(cpu);
}
@Override
public void buildMainboard(String mainboard) {
mComputer.setmMainboard(mainboard);
}
@Override
public void buildRam(String ram) {
mComputer.setmRam(ram);
}
@Override
public Computer create() {
return mComputer;
}
}
複製代碼
CPU
,最後安裝內存並組裝完成計算機:public class Director {
Builder mBuild = null;
public Director(Builder build){
this.mBuild = build;
}
public Computer CreateComputer(String cpu, String mainboard, String ram){
//規範建築流程
this.mBuild.buildMainboard(mainboard);
this.mBuild.buildCpu(cpu);
this.mBuild.buildRam(ram);
return mBuild.create();
}
}
複製代碼
CPU
、主板和內存就能夠了,至於商家怎樣組裝計算機咱們無須知道。public class CreateComputer {
public static void main(String[] args){
Builder mBuilder = new MoonComputerBuilder();
Director mDirector = new Director(mBuilder);
//組裝計算機
mDirector.CreateComputer("i7-6700", "華擎玩家至尊", "三星 DDR4");
}
}
複製代碼
Build
對象以及導演類。