Java设计模式——建造者模式

本文介绍建造者模式的基本概念,通过UML图展示其组成角色,并给出Java代码实现示例,帮助理解如何通过分离构建过程与产品表示来创建不同类型的复杂对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

建造者(Builder)模式,又称为生成器模式。它是将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。当采用了建造者模式,用户就只需要指定需要建造的类型就可以得到想要的最终结果,至于具体的构建过程和构建细节不需要过多知晓。

UML

建造者模式
Director:指挥者,主要负责调度Builder接口对象,构建成型的产品。
Builder:抽象接口,封装了Product各个部件的生产方法和工序。
ConcreteBuilder:具体的构建者,它实现了Builder接口,执行具体的构建过程。
Product:具体的产品类。

代码举例

/**
 * 角色:Product
 * 产品类
 */
public class Product {
    ArrayList<String> parts = new ArrayList<>();

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

    public void show() {
        for (String part : parts) {
            System.out.println(part);
        }
    }
}
/**
 * 角色:Builder
 * 建造者基类
 */

public interface Builder {
    void buildPartA();

    void buildPartB();

    void buildPartC();

    Product getFinalProduct();
}
/**
 * 角色:ConcreteBuilder
 * 具体的建造者
 */
public class ConcreteBuilderA implements Builder {
    private Product product;

    public ConcreteBuilderA() {
        product = new Product();
    }

    @Override
    public void buildPartA() {
        product.add("part a");
    }

    @Override
    public void buildPartB() {
        product.add("part b");
    }

    @Override
    public void buildPartC() {
        product.add("part c");
    }

    @Override
    public Product getFinalProduct() {
        return product;
    }
}
/**
 * 角色:ConcreteBuilder
 * 具体的建造者
 */
public class ConcreteBuilderB implements Builder {
    private Product product;

    public ConcreteBuilderB() {
        product = new Product();
    }

    @Override
    public void buildPartA() {
        product.add("part x");
    }

    @Override
    public void buildPartB() {
        product.add("part y");
    }

    @Override
    public void buildPartC() {
        product.add("part z");
    }

    @Override
    public Product getFinalProduct() {
        return product;
    }
}
/**
 * 角色:ConcreteBuilder
 * 具体的建造者
 */
public class ConcreteBuilderC implements Builder {
    private Product product;

    public ConcreteBuilderC() {
        product = new Product();
    }

    @Override
    public void buildPartA() {
        product.add("part one");
    }

    @Override
    public void buildPartB() {
        product.add("part two");
    }

    @Override
    public void buildPartC() {
        product.add("part three");
    }

    @Override
    public Product getFinalProduct() {
        return product;
    }
}
/**
 * 角色:Director
 * 指挥者
 */
public class Director {
    public void Construct(Builder builder) {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
    }
}
public class Main {
    public static void main(String[] args) {
        Director director = new Director();
        Builder builderA = new ConcreteBuilderA();
        Builder builderB = new ConcreteBuilderB();
        Builder builderC = new ConcreteBuilderC();

        director.Construct(builderA);
        director.Construct(builderB);
        director.Construct(builderC);

        Product productA = builderA.getFinalProduct();
        Product productB = builderB.getFinalProduct();
        Product productC = builderC.getFinalProduct();

        productA.show();
        productB.show();
        productC.show();

    }
}

总结

建造者的思维模式是将构建的方法和具体的构建操作分离,Builder类提供具体的构建方法,Director类来负责调度和下达构建指令。这样的话,可以将产品的结构和产品的零件的建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造者零件的责任分割开来,达到责任划分和封装的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值