设计模式-建造者模式

建造者模式UML类图

Product :代表要构建的复杂对象,包含一个parts列表来存储构建的部件,并有addshow方法来添加部件和展示产品

Builder:是抽象建造者角色,定义了构建产品的方法,并返回自身以支持链式调用

ConcreteBuilder:是具体建造者角色,实现了Builder中定义的方法,构建产品的具体部分

Director:是指挥者角色,负责安排构建过程,并使用Builder来构建产品

ConcreteBuilder:继承自BuilderDirector:使用Builder来构建产品

一、产品角色(Product)

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class Product {
    private List<String> parts;

    public Product() {
        this.parts = new ArrayList<>();
    }

    public void add(String part) {
        parts.add(part);
    }

    public void show() {
        System.out.println("------------");
        for (String part : parts) {
            System.out.println(part);
        }
        System.out.println("------------");
    }
}

二、抽象建造者角色(Builder)

java 复制代码
public abstract class Builder {
    protected Product product = new Product();

    public abstract Builder buildPartA();

    public abstract Builder buildPartB();

    public Product build() {
        return product;
    }
}

三、具体建造者角色(ConcreteBuilder)

java 复制代码
public class ConcreteBuilder extends Builder {
    @Override
    public Builder buildPartA() {
        product.add("PartA");
        return this;
    }

    @Override
    public Builder buildPartB() {
        product.add("PartB");
        return this;
    }
}

四、指挥者角色(Director)

java 复制代码
public class Director {
    private Builder builder;

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

    public void construct() {
        builder.buildPartA().buildPartB();
    }

    public Product getProduct() {
        return builder.build();
    }
}

五、测试

java 复制代码
public class Client {
    public static void main(String[] args) {
        Director director = new Director(new ConcreteBuilder());
        director.construct();
        Product product = director.getProduct();
        product.show();
    }
}
相关推荐
杨充17 分钟前
10.可测试性实战设计
设计模式·开源·代码规范
杨充25 分钟前
9.重构十二式的实战
设计模式·开源·代码规范
杨充36 分钟前
6.设计原则的全景图
设计模式·开源·全栈
杨充38 分钟前
2.面向对象的特性
设计模式
杨充38 分钟前
7.SOLID原则案例汇
设计模式·开源·全栈
杨充38 分钟前
8.反模式与坏味道
设计模式·开源·代码规范
杨充1 小时前
3.接口vs抽象类比较
设计模式
咖啡八杯4 小时前
文法、BNF与AST
java·设计模式·解释器模式·ast·文法
咖啡八杯12 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式