建造者模式(builder)是建立一个复杂对象的建立型模式,将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。html
建造者模式角色:java
抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。通常而言,此接口独立应用程序的商业逻辑。模式中直接建立产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的两种方法:一种是建造方法(buildPart1和buildPart2),另外一种是返还结构方法(retrieveResult)。通常来讲,产品所包含的零件数目与建造方法的数目相符。换言之,有多少 零件,就有多少相应的建造方法。算法
具体建造者(ConcreteBuilder)角色:担任这个角色的是与应用程序紧密相关的一些类,它们在应用程序调用下建立产品的实例。这个角色要完成的任务包括:1.实现抽象建造者Builder所声明的接口,给出一步一步地完成建立产品实例的操做。2.在建造过程完成后,提供产品的实例。bash
导演者(Director)角色:担任这个角色的类调用具体建造者角色以建立产品对象。应当指出的是,导演者角色并无产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色。ui
产品(Product)角色:产品即是建造中的复杂对象。通常来讲,一个系统中会有多于一个的产品类,并且这些产品类并不必定有共同的接口,而彻底能够是不相关联的。 this
目录结构:spa
咱们使用建造者模式, 建立一辆 保时捷(Porsche) 来溜达溜达,大致上一辆车主要有如下属性(简单列举了几个)code
public class Porsche {
//引擎
private String engine;
//气缸
private String cylinder;
//车架
private String frame;
// 省略 get/set method
}
复制代码
抽象Builder类, 列举咱们在建立一辆车过程当中,须要安装哪些部件cdn
public abstract class Builder {
public abstract void buildEngine(String engine);
public abstract void buildCylinder(String cylinder);
public abstract void buildFrame(String frame);
public abstract Porsche create();
}
复制代码
具体实现建立的方法,用于建立车辆htm
public class PorscheBuilder extends Builder {
private Porsche porsche = new Porsche();
public void buildEngine(String engine) {
porsche.setEngine(engine);
}
public void buildCylinder(String cylinder) {
porsche.setCylinder(cylinder);
}
public void buildFrame(String frame) {
porsche.setFrame(frame);
}
public Porsche create() {
return porsche;
}
}
复制代码
指挥官, 负责建立过程当中的流程编排
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Porsche createPorsche(String engine, String cylinder, String frame) {
builder.buildEngine(engine);
builder.buildCylinder(cylinder);
builder.buildFrame(frame);
return builder.create();
}
}
复制代码
class create {
public static void main(String[] args) {
Builder builder = new PorscheBuilder();
Director director = new Director(builder);
//组装车辆
director.createPorsche("engine","cylinder","frame");
}
}
复制代码
使用场景
参考: