设计模式之建造者(builder)

一.简介

一个复杂的对象通常有一系列创建步骤,如汽车组装:车架、发动机、方向盘、轮胎等。

建造者模式可以很好处理需要多个创建步骤的对象创建,建造者模式将一个复杂的对象分解为多个简单的对象,再逐步构建。建造者模式注重部件的组装过程。

建造者(Builder)模式结构:
1.产品角色(Product):包含多个组成部件的复杂对象,由具体建造者来创建其各个部件。

2.抽象建造者(Builder):包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 build()。

3.具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。

4.指挥者(Director):调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。

二.实现

package com.vincent;



/**
 * 产品对象
 */
class Product {
    private String partA;
    private String partB;
    private String partC;

    public void setPartA(String partA) {
        this.partA=partA;
    }

    public void setPartB(String partB) {
        this.partB=partB;
    }

    public void setPartC(String partC) {
        this.partC=partC;
    }
}

/**
 * 抽象构建者
 */
abstract class AbstructProductBuilder {
    protected Product product=new Product();

    public abstract AbstructProductBuilder buildPartA(String partA);
    public abstract AbstructProductBuilder buildPartB(String partB);
    public abstract AbstructProductBuilder buildPartC(String partC);

    public Product build(){
        return product;
    }
}


/**
 * 产品构建者
 * 构建过程返回构建者对象,方便可以使用链式调用
 */
class ProductBuilder extends AbstructProductBuilder{

    @Override
    public AbstructProductBuilder buildPartA(String partA) {
        product.setPartA(partA);
        return this;
    }

    @Override
    public AbstructProductBuilder buildPartB(String partB) {
        product.setPartB(partB);
        return this;
    }

    @Override
    public AbstructProductBuilder buildPartC(String partC) {
        product.setPartC(partC);
        return this;
    }
}


/**
 * 构建指挥者
 */
class ProductDirector{

    private AbstructProductBuilder builder;

    public ProductDirector(AbstructProductBuilder builder) {
        this.builder = builder;
    }

    public Product build(String partA,String partB,String partC){
        builder.buildPartA(partA).buildPartB(partB).buildPartC(partC);
        return builder.build();
    }
}

三.总结

1.构建者模式关注复杂对象构建的各部件构建过程

2.对于构建的产品只有一类产品时可以省略抽象构建者、构建指挥者

猜你喜欢

转载自blog.csdn.net/Zllvincent/article/details/107272551