建造者模式:最重要的是指挥者类对复杂产品的拼装顺序和方法,适用于拼装方式比较稳定但复杂的产品。
public class House { //地基 private String foundation; //主体 private String subject; //装饰 private String decorate; public House() { } public String getFoundation() { return foundation; } public void setFoundation(String foundation) { this.foundation = foundation; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getDecorate() { return decorate; } public void setDecorate(String decorate) { this.decorate = decorate; } @Override public String toString() { return "House{" + "foundation='" + foundation + '\'' + ", subject='" + subject + '\'' + ", decorate='" + decorate + '\'' + '}'; } }
public abstract class Builder { protected House house = new House(); public abstract void doFoundation(); public abstract void doSubject(); public abstract void doDecorate(); public abstract House createHouse(); }
public class CommonBuilder extends Builder { @Override public void doFoundation() { house.setFoundation("石头地基"); } @Override public void doSubject() { house.setSubject("木头主体"); } @Override public void doDecorate() { house.setDecorate("叙利亚装饰"); } @Override public House createHouse() { return house; } }
public class BestBuilder extends Builder { @Override public void doFoundation() { house.setFoundation("水泥地基"); } @Override public void doSubject() { house.setSubject("钢筋混凝土主体"); } @Override public void doDecorate() { house.setDecorate("豪华装饰"); } @Override public House createHouse() { return house; } }
public class Directory { private Builder builder; public Directory(Builder builder) { this.builder = builder; } public House getHouse(){ //通过一定的算法组装一个对象(先打地基后做主体最后装饰) builder.doFoundation(); builder.doSubject(); builder.doDecorate(); return builder.createHouse(); } }
public class Client { public static void main(String[] args) { //获得一个具体建造者对象 CommonBuilder commonBuilder = new CommonBuilder(); //获得一个指挥者对象 Directory directory = new Directory(commonBuilder); //完成搭盖房子 House house = directory.getHouse(); }