建造者模式(builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
举个建造汽车的例子,现在要建造一辆汽车,需要发动机,变速箱,底盘(汽车三大件)
产品类:
public class Car { PRivate String engine; // 发动机引擎 private String transmission; // 变速箱 private String chassis; // 底盘 public String getEngine() { return engine; } public void setEngine(String engine) { this.engine = engine; } public String getTransmission() { return transmission; } public void setTransmission(String transmission) { this.transmission = transmission; } public String getChassis() { return chassis; } public void setChassis(String chassis) { this.chassis = chassis; } @Override public String toString() { return "Car{" + "engine='" + engine + '/'' + ", transmission='" + transmission + '/'' + ", chassis='" + chassis + '/'' + '}'; }}抽象建造者
public abstract class Builder { public abstract void buildEngine(String engine); public abstract void buildTransmission(String transmission); public abstract void buildChassis(String chassis); public abstract Car create();}建造者
public class DFCarBuilder extends Builder { private Car dfCar = new Car(); @Override public void buildEngine(String engine) { dfCar.setEngine(engine); } @Override public void buildTransmission(String transmission) { dfCar.setTransmission(transmission); } @Override public void buildChassis(String chassis) { dfCar.setChassis(chassis); } @Override public Car create() { return dfCar; }}用Dirextor指挥者类来统一组装过程
public class Dirextor { Builder builder = null; public Dirextor(Builder builder) { this.builder = builder; } public Car createCar(String engine, String transmission, String chassis){ this.builder.buildChassis(chassis); this.builder.buildEngine(engine); this.builder.buildTransmission(transmission); return builder.create(); } public static void main(String[] args) { Builder builder = new DFCarBuilder(); Dirextor dirextor = new Dirextor(builder); Car myCar = dirextor.createCar("地球梦科技发动机", "爱信9AT自动变速箱", "标志的底盘"); System.out.println(myCar.toString()); }}使用场景:
当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。相同的方法,不同的执行顺序,产生不同的事件结果时。多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能。创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。优点:
使用建造者模式可以使客户端不必知道产品内部组成的细节。具体的建造者类之间是相互独立的,容易扩展。由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。新闻热点
疑难解答