(十一)建造者模式

1 概述

建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。

  • 建造者模式主要是用干创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

  • 建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

2 示例

Product类——产品类,由多个部件组成。

import java.util.ArrayList;
import java.util.List;

public class Product {
    List<String> parts = new ArrayList<>();

    // 添加产品部件
    public void add(String part) {
        parts.add(part);
    }

    // 列举所有的产品部件
    public void show() {
        System.out.println("\n产品部件:");
        for (String part : parts) {
            System.out.println(part);
        }
    }
}

Builder类——抽象建造者类,确定产品由两个部件 PartA 和 PartB 组成,并声明一个得到产品建造后结果的方法 GetResult。

public abstract class Builder {
    public abstract void builderPartA();
    public abstract void builderPartB();
    public abstract Product getResult();
}

ConcreteBuilder1类——具体建造者类。

public class ConcreteBuilder1 extends Builder {
    private Product product = new Product();

    // 建造具体的两个部件是部件A和部件B
    @Override
    public void builderPartA() {
        product.add("部件A");
    }

    @Override
    public void builderPartB() {
        product.add("部件B");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

ConcreteBuilder2类——具体建造者类。

public class ConcreteBuilder2 extends Builder {
    private Product product = new Product();

    //建造具体的两个部件是部件X和部件Y
    @Override
    public void builderPartA() {
        product.add("部件X");
    }

    @Override
    public void builderPartB() {
        product.add("部件Y");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

Director类——指挥者类。

public class Director {
    public void construct(Builder builder) {
        // 用来指挥建造过程
        builder.builderPartA();
        builder.builderPartB();
    }
}

客户端代码,客户不需知道具体的建造过程。

public class Client {
    public static void main(String[] args) {
        Director director = new Director();
        Builder b1 = new ConcreteBuilder1();
        Builder b2 = new ConcreteBuilder2();

        // 指挥者用ConcreteBuilder1的方法来建造产品
        director.construct(b1);
        Product p1 = b1.getResult();
        p1.show();

        // 指挥者用ConcreteBuilder1的方法来建造产品
        director.construct(b2);
        Product p2 = b2.getResult();
        p2.show();
    }
}

输出入下。


产品部件:
部件A
部件B

产品部件:
部件X
部件Y

Process finished with exit code 0

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

posted @   DaleLee  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示