建造模式:某些产品(业务逻辑),需要多个零件(逻辑)组合而成,这时,可以选择建造模式来完成代码设计。
在建造模式包括了(1)抽象建造类,(2)具体建造类,(3)产品类,(4)指挥类。客户端在调用的时候,不必具体了解各个产品的创建过程,只需告诉指挥类,我要创建哪个产品,在指挥类中完成对产品建造的加载,具体建造过程由具体建造类来完成。
下面给出例子代码,制造长城汽车和制造QQ汽车。
抽象产品类
public interface Product { public String getMotor(); public void setMotor(String motor); public String getCarSite(); public void setCarSite(String carSite); public String getWhell(); public void setWhell(String whell); }
具体产品类(长城汽车,QQ汽车)
public class ProductChangCheng implements Product { private String motor = null; private String carSite = null; private String whell = null; public String getMotor() { return motor; } public void setMotor(String motor) { this.motor = motor; } public String getCarSite() { return carSite; } public void setCarSite(String carSite) { this.carSite = carSite; } public String getWhell() { return whell; } public void setWhell(String whell) { this.whell = whell; } }
public class ProductQQ implements Product { private String motor = null; private String carSite = null; private String whell = null; public String getMotor() { return motor; } public void setMotor(String motor) { this.motor = motor; } public String getCarSite() { return carSite; } public void setCarSite(String carSite) { this.carSite = carSite; } public String getWhell() { return whell; } public void setWhell(String whell) { this.whell = whell; } }
抽象建造类
public interface Builder { // 制造发动机 public void buildMotor (); // 制造车轮 public void buildWhell (); // 制造底盘 public void buildCarsite (); // 返回产品类 public Product getProduct(); }
具体建造类(制造长城汽车,制造QQ汽车)
public class CreateCarChangCheng implements Builder { private Product product = new ProductChangCheng(); @Override public void buildCarsite() { product.setCarSite("长城汽车底盘"); System.out.println("制造长城汽车底盘"); } @Override public void buildMotor() { product.setMotor("长城汽车发动机"); System.out.println("制造长城汽车发动机"); } @Override public void buildWhell() { product.setWhell("长城汽车车轮"); System.out.println("制造长城汽车车轮"); } @Override public Product getProduct() { return product; } }
public class CreateQQ implements Builder { private Product product = new ProductChangCheng(); @Override public void buildCarsite() { product.setCarSite("QQ汽车底盘"); System.out.println("制造QQ汽车底盘"); } @Override public void buildMotor() { product.setMotor("QQ汽车发动机"); System.out.println("制造QQ汽车发动机"); } @Override public void buildWhell() { product.setWhell("QQ汽车车轮"); System.out.println("制造QQ汽车车轮"); } @Override public Product getProduct() { return product; } }
指挥类
public class Director { Product product = null; Builder builder = null; public Director (Builder builder) { this.builder = builder; } public Product build () { builder.buildMotor(); builder.buildCarsite(); builder.buildWhell(); return builder.getProduct(); } }
客户端调用
public class Ex { public static void main (String [] args) { // 制造一辆QQ CreateQQ cq = new CreateQQ(); Director directorQQ = new Director(cq); Product pQQ = directorQQ.build(); System.out.println(pQQ.getCarSite()); // 制造一辆QQ CreateCarChangCheng cccc = new CreateCarChangCheng(); Director directorCC = new Director(cccc); Product pCC = directorCC.build(); System.out.println(pCC.getCarSite()); } }