建造者模式
定义:也叫生成器模式
将一个复杂对象的构建与它的表示分离,使得同样构建过程可以创建不同的表示。
模式类图;
角色:
- 抽象建造者角色:
Builder
规范产品的各个组成部分,并进行抽象,提供抽象的方法,一般独立于应用程序的逻辑
- 具体建造者角色:
ConcreteBuilder
实现抽象建造者中定义的抽象方法,并且返回一个组建好的产品实例。
- 产品角色:
Product
建造者中的复杂对象,一个系统中会有多于一个的产品类,这些产品类不一定有共同的接口,完全可以不相关联。
- 导演者角色:
Director
该角色负责安排已有的模块顺序,然后告诉
Builder
开始建造。
代码如下:
/**
* 建造者模式
* @author zhurong
* @create 2021/1/31
*/
public abstract class Builder {
public abstract void setPart1();
public abstract void setPart2();
public abstract void setPart3();
//构建产品
public abstract Product buildProduct();
}
这是抽象建造者
public class Product {
}
这是产品
/**
* @author zhurong
* @create 2021/1/31
*/
public class ConcreteBuilder extends Builder{
private Product product=new Product();
@Override
public void setPart1() {
}
@Override
public void setPart2() {
}
@Override
public void setPart3() {
}
@Override
public Product buildProduct() {
return product;
}
}
这是具体建造者,所有产品的实现细节都在这里。
/**
* @author zhurong
* @create 2021/1/31
*/
public class Director {
private Builder builder=new ConcreteBuilder();
public Product build(){
builder.setPart1();
builder.setPart2();
builder.setPart3();
return builder.buildProduct();
}
}
这是导演者代码,导演者起到封装作用,避免高层模块深入到建造者内部实现类。最后返回产品实例。
建造者模式的特点:
- 封装性
- 建造者独立,容易扩展
- 便于控制细节风险
建造者的使用场景:
- 相同的方法,不同的执行顺序,产生不同结果时
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果不同
- 产品类很复杂,或吹牛皮类中的方法调用顺序不同产生不同的效果时
- 对象创建过程中会使用到系统的一些其他对象时
建造者关注零件类型和装配工艺顺序。