设计模式-建造者模式

建造者模式

定义:将一个复杂对象的构造与他的表示分离,使同样的构建过程可以创建不同的表示。

使用场景:一些基本部件不变,但是组合经常变化。就比如肯德基套餐很多样,但是都是可乐、汉堡、鸡腿、鸡翅等组成的。

使用实例:Java中的StringBuilder

建造者模式的主要角色如下:

  • 产品 (Product) :要创建的复杂对象
  • 抽象建造者(Builder):提供创建产品各个子部件的抽象方法,通常还包含一个返回复杂产品的方法
  • 具体建造者(Concrete): 实现Builder接口,完成复杂产品的各个部件的具体创建方法
  • 指挥者(Director):它调用建造者对象中的方法进行产品创建。

代码示例:

public abstract class Builder {

    protected Product product=new Product();

    abstract void buildPartA();
    abstract void buildPartB();
    abstract void buildPartC();

    Product getResult(){
        return product;
    }
}
public class ConcreteBuilder extends Builder {

    @Override
    public void buildPartA() {
        product.setPartA("组成A部分");
    }

    @Override
    public void buildPartB() {
        product.setPartB("组成B部分");
    }

    @Override
    public void buildPartC() {
        product.setPartC("组成C部分");
    }

}
public class Director {

    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public Product construct(){
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}
public class Product {

    private String partA;
    private String partB;
    private String partC;

    public String getPartA() {
        return partA;
    }

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

    public String getPartB() {
        return partB;
    }

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

    public String getPartC() {
        return partC;
    }

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

    public void show(){
        System.out.println("Product{" +
                "partA='" + partA + '\'' +
                ", partB='" + partB + '\'' +
                ", partC='" + partC + '\'' +
                '}');
    }
}

测试代码:

 public static void main(String[] args) {
        Builder builder=new ConcreteBuilder();
        Director director=new Director(builder);
        Product product = director.construct();
        product.show();
    }
posted @ 2021-06-26 23:31  女友在高考  阅读(74)  评论(0编辑  收藏  举报