package builder; public interface MainBoard { String desc(); }
package builder; public class DellMainBoard implements MainBoard { @Override public String desc() { return "DELL mainBoard"; } }
package builder; public class AsusMainBoard implements MainBoard { @Override public String desc() { return "ASUS mainBoard"; } }
package builder; public interface DisplayDevice { String Desc(); }
package builder; public class DellDisplayDevice implements DisplayDevice { @Override public String Desc() { return "DELL display device"; } }
package builder; public class AsusDisplayDevice implements DisplayDevice { @Override public String Desc() { return "ASUS display device"; } }
package builder; public interface Creator { MainBoard createMainBoard(); DisplayDevice createDisplayDevice(); }
package builder; public class ConcreateCreatorDell implements Creator { @Override public MainBoard createMainBoard() { return new DellMainBoard(); } @Override public DisplayDevice createDisplayDevice() { return new DellDisplayDevice(); } }
package builder; public class ConcreateCreatorAsus implements Creator { @Override public MainBoard createMainBoard() { return new AsusMainBoard(); } @Override public DisplayDevice createDisplayDevice() { return new AsusDisplayDevice(); } }
package builder; public class Computer { private MainBoard mainBoard; private DisplayDevice displayDevice; public MainBoard getMainBoard() { return mainBoard; } public void setMainBoard(MainBoard mainBoard) { this.mainBoard = mainBoard; } public DisplayDevice getDisplayDevice() { return displayDevice; } public void setDisplayDevice(DisplayDevice displayDevice) { this.displayDevice = displayDevice; } @Override public String toString() { final StringBuilder sb = new StringBuilder("Computer{"); sb.append("mainBoard=").append(mainBoard.desc()); sb.append(", displayDevice=").append(displayDevice.Desc()); sb.append('}'); return sb.toString(); } }
package builder; public class AssembleComputer { Creator creator; AssembleComputer(Creator creator){ this.creator = creator; } public Computer getComputer(){ Computer computer = new Computer(); MainBoard mainBoard = creator.createMainBoard(); DisplayDevice displayDevice = creator.createDisplayDevice(); computer.setMainBoard(mainBoard); computer.setDisplayDevice(displayDevice); return computer; } }
package builder; public interface CreatorRefactor { void assembleMainBoard(); void assembleDisplayDevice(); Computer getComputer(); }
package builder; public class ConcreateCreatorDellRefactor implements CreatorRefactor { private Computer computer = new Computer(); @Override public void assembleMainBoard() { computer.setMainBoard(new DellMainBoard()); } @Override public void assembleDisplayDevice() { computer.setDisplayDevice(new DellDisplayDevice()); } @Override public Computer getComputer() { return computer; } }
package builder; public class ConcreateCreatorAsusRefactor implements CreatorRefactor { private Computer computer = new Computer(); @Override public void assembleMainBoard() { computer.setMainBoard(new AsusMainBoard()); } @Override public void assembleDisplayDevice() { computer.setDisplayDevice(new AsusDisplayDevice()); } @Override public Computer getComputer() { return computer; } }
package builder; public class AssembleComputerRefactor { CreatorRefactor creatorRefactor; AssembleComputerRefactor(CreatorRefactor creatorRefactor){ this.creatorRefactor = creatorRefactor; } public Computer getComputer(){ creatorRefactor.assembleMainBoard(); creatorRefactor.assembleDisplayDevice(); return creatorRefactor.getComputer(); } }
package buildPattern; public interface Builder { void buildPart1(); void buildPart2(); Product buildProduct(); }
package buildPattern; public class ConcreateBuilder implements Builder { private Product product = new Product(); @Override public void buildPart1() { //... } @Override public void buildPart2() { //... } @Override public Product buildProduct() { return product; } }
package buildPattern; public class Product { }
package buildPattern; public class Director { private Builder builder; Director(Builder builder) { this.builder = builder; } public Product getProduct() { builder.buildPart1(); builder.buildPart2(); return builder.buildProduct(); } }
package simplebuilder; /** * Created by noteless on 2018/10/17. * Description:假定有一個MyObject類,有7個屬性前面兩個v1 和 v2 是必選,其他可選 * * @author noteless */ public class MyObject { private int v1;//必選 private int v2;//必選 private int v3;//可選 private int v4;//可選 private int v5;//可選 private int v6;//可選 private int v7;//可選 private static class Builder { private int v1; private int v2; private int v3 = 0; private int v4 = 0; private int v5 = 0; private int v6 = 0; private int v7 = 0; public Builder(int v1, int v2) { this.v1 = v1; this.v2 = v2; } public Builder setV3(int v3) { this.v3 = v3; return this; } public Builder setV4(int v4) { this.v4 = v4; return this; } public Builder setV5(int v5) { this.v5 = v5; return this; } public Builder setV6(int v6) { this.v6 = v6; return this; } public Builder setV7(int v7) { this.v7 = v7; return this; } public MyObject build() { return new MyObject(this); } } private MyObject(Builder builder) { v1 = builder.v1; v2 = builder.v2; v3 = builder.v3; v4 = builder.v4; v5 = builder.v5; v6 = builder.v6; v7 = builder.v7; } @Override public String toString() { final StringBuilder sb = new StringBuilder("MyObject{"); sb.append("v1=").append(v1); sb.append(", v2=").append(v2); sb.append(", v3=").append(v3); sb.append(", v4=").append(v4); sb.append(", v5=").append(v5); sb.append(", v6=").append(v6); sb.append(", v7=").append(v7); sb.append('}'); return sb.toString(); } public static void main(String[] args) { MyObject my = new MyObject.Builder(1, 2). setV3(3).setV4(4).setV5(5).setV6(6).setV7(7).build(); System.out.println(my.toString()); } }
public MyObject build() {web
return new MyObject(this);設計模式
}
app