毅四捕Go设计模式笔记——建造者模式

为了解决什么问题?

建造者模式用来解决复杂对象的构建问题。当一个对象的构建过程复杂,包含多个组成部分,且每部分均可按不同的顺序和配置组合时,直接实例化该对象会导致构造方法非常庞大,并且难以理解。

使用建造者模式可以将一个复杂对象的构建过程封装在一个单独的Builder类中,分步骤进行构建,并允许使用不同的构建过程生成不同表现形式的对象。

怎么用代码实现?

下面是Java代码示例,先定义产品:

class Product {
    private String partA;
    private String partB;

    public void show() {
        System.out.println("PartA: " + partA + ", PartB: " + partB);
    }

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

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

然后,定义抽象建造者和指挥者:

abstract class AbstractBuilder {
    protected Product product = new Product();

    public abstract AbstractBuilder buildPartA(String partA);
    public abstract AbstractBuilder buildPartB(String partB);

    public Product build() {
        return product;
    }
}

class Director {
    public Product construct(AbstractBuilder builder) {
        builder.buildPartA("A1");
        builder.buildPartB("B1");
        return builder.build();
    }
}

接着,依据具体场景定义对应的建造者:

class ConcreteBuilder extends AbstractBuilder {
    @Override
    public AbstractBuilder buildPartA(String partA) {
        product.setPartA(partA);
        return this;
    }

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

最后,使用指挥者依据指定的具体建造者,就可以愉快的构建产品对象了:

Director director = new Director();
AbstractBuilder builder = new ConcreteBuilder();
Product product = director.construct(builder);
product.show();

为什么可以解决这个问题?

建造者模式通过引入独立的Builder类来解决复杂对象的构建问题。这样做将对象的构建过程从其表现形式中抽离出来,允许逐步构建复杂对象并清晰控制每个构建步骤。

此外,相同的构建过程可以创建具有不同表现形式的多个对象,提高了代码的复用性和灵活性。

建造者模式适用于哪些场景?

建造者模式适用于以下几种场景:

复杂对象的创建:当创建的对象由多个组成部分构成,且组件的构建顺序和配置可变时,建造者模式特别有用。

参数对象的构建:当函数或方法需要接收大量参数时,建造者模式可以帮助客户端构建含有多个可选参数的参数对象。

不同表示的对象构建:建造者允许使用相同的构建代码创建不同表示(例如风格、布局)的对象。

建造者模式在开源代码中很常见,下面是一些经典的应用案例:

java.lang.StringBuilder/StringBuffer:在Java标准库中,StringBuilder及其线程安全版本StringBuffer内部使用建造者模式构建字符串对象。
android.app.AlertDialog:在Android开发中,AlertDialog的创建经常使用Builder模式,允许设置标题、消息内容、按钮等属性,并保持易于阅读和维护。
java.nio.ByteBuffer等Buffer类:Java NIO的Buffer类提供了put方法来逐步构建缓冲区的内容。
javax.swing.GroupLayout:Swing库中的GroupLayout允许通过连缀方式构建复杂的GUI组件布局。

建造者模式提供了一个灵活而强大的方式来构建复杂的对象,同时让代码保持清晰,提高了代码的可读性。

此外,由于建造者模式对构建过程进行了细致的管理,因此容易对构建过程和所产生的对象实例进行测试和验证。

———————————这是分割线———————————

欢迎添加博主vx深入交流:
博主微信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值