Java設計模式學習-建造者模式
阿新 • • 發佈:2018-12-26
建造者模式的本質
- 分離了物件子元件的單獨構造(由Builder來負責)和裝配(由Director負責)。從而可以構造出複雜的物件。這個模式適用於 : 某個物件的構建過程複雜的情況下使用 。
- 由於實現了構建和裝配的解耦 。不同的構建器 , 相同的裝配 , 也可以做出不同的物件 。相同的構造器 , 不同的裝配順序也可以做出不同的物件 。 也就是實現了構建演算法 , 裝配演算法的解耦 , 實現了更好的複用 。
1), 建立了建立宇宙飛船類 --其中在建立類 發動機類/逃逸倉類/頭等艙類
/** 宇宙飛船物件 * @author 曉電腦 */ public class Spacecraft { public Spacecraft(EngineModule engine, EscapeBinModule escapeBin, FirstClassCabiModule firstClassCabi) { Engine = engine; EscapeBin = escapeBin; FirstClassCabi = firstClassCabi; } public Spacecraft() { } //飛船發動機 private EngineModule Engine; //飛船逃逸倉 private EscapeBinModule EscapeBin; //飛船頭等艙 private FirstClassCabiModule FirstClassCabi; public EngineModule getEngine() { return Engine; } public void setEngine(EngineModule engine) { Engine = engine; } public EscapeBinModule getEscapeBin() { return EscapeBin; } public void setEscapeBin(EscapeBinModule escapeBin) { EscapeBin = escapeBin; } public FirstClassCabiModule getFirstClassCabi() { return FirstClassCabi; } public void setFirstClassCabi(FirstClassCabiModule firstClassCabi) { FirstClassCabi = firstClassCabi; } } /** * 飛船發動機類 */ class EngineModule{ private String Engine; public EngineModule(String engine) { Engine = engine; } public String getEngine() { return Engine; } public void setEngine(String engine) { Engine = engine; } } /** * 飛船逃逸倉類 */ class EscapeBinModule{ private String EscapeBin; public EscapeBinModule(String escapeBin) { EscapeBin = escapeBin; } public String getEscapeBin() { return EscapeBin; } public void setEscapeBin(String escapeBin) { EscapeBin = escapeBin; } } /** * 頭等艙類 */ class FirstClassCabiModule{ private String FirstClassCabi; public FirstClassCabiModule(String firstClassCabi) { FirstClassCabi = firstClassCabi; } public String getFirstClassCabi() { return FirstClassCabi; } public void setFirstClassCabi(String firstClassCabi) { FirstClassCabi = firstClassCabi; } }
2),建立宇宙飛船元件
/**
* 用於建立飛船的子元件 如發動機類/頭等艙類/逃逸倉類 介面
*/
public interface SpacecraftBuilder {
EngineModule builderEngine();
EscapeBinModule builderEscapeBin();
FirstClassCabiModule builderFirstClassCabi();
}
3), 建立宇宙飛船元件實現類
public class XiaoSpacecraftBuilder implements SpacecraftBuilder { @Override public EngineModule builderEngine() { System.out.println("構建發動機"); return new EngineModule("小發動機構建成功"); } @Override public EscapeBinModule builderEscapeBin() { System.out.println("構建逃逸倉"); return new EscapeBinModule("小逃逸倉構建成功"); } @Override public FirstClassCabiModule builderFirstClassCabi() { System.out.println("構建頭等艙"); return new FirstClassCabiModule("小頭等艙構建成功"); } }
4),建立宇宙飛船組裝介面類
/**
* 組裝宇宙飛船介面
*/
public interface SpacecraftDirector {
Spacecraft createSpacecraft();
}
5),宇宙飛船組裝類實現類
public class xiaoSpacecraftDirector implements SpacecraftDirector { private SpacecraftBuilder spacecraftBuilder; public xiaoSpacecraftDirector(SpacecraftBuilder spacecraftBuilder) { this.spacecraftBuilder=spacecraftBuilder; } @Override public Spacecraft createSpacecraft() { //構建發動機 EngineModule module = spacecraftBuilder.builderEngine(); //構建逃逸倉 EscapeBinModule module1 = spacecraftBuilder.builderEscapeBin(); //構建頭等艙 FirstClassCabiModule classCabiModule = spacecraftBuilder.builderFirstClassCabi(); //建立宇宙飛船 Spacecraft spacecraft = new Spacecraft(module,module1,classCabiModule); return spacecraft; } }
6),建立test測試的客戶端Cilent如下
/**
* 測試建立宇宙飛船
*/
public class Client {
public static void main (String[] args) {
xiaoSpacecraftDirector director = new xiaoSpacecraftDirector(new XiaoSpacecraftBuilder());
Spacecraft spacecraft = director.createSpacecraft();
System.out.println(spacecraft.getEngine().getEngine());
System.out.println(spacecraft.getEscapeBin().getEscapeBin());
System.out.println(spacecraft.getFirstClassCabi().getFirstClassCabi());
}
}
執行結果:
建立者模式類圖如下
建造者模式在開發中應用場景 :
- StringBuilder 類的append 方法
- SQL 中的PreparedStatement
- JDOM 中 , DomBuilder , SAXBuilder