设计模式详解(三):创建者模式——Builder

什么是 Builder 模式?

Builder(建造者)模式是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。它特别适用于创建包含多个组成部分的对象,允许逐步构建对象的过程。

模式结构

Builder 模式的核心角色包括:

  • Builder(抽象建造者):定义创建产品各个部分的接口。
  • ConcreteBuilder(具体建造者):实现 Builder 接口,构建和装配产品的各个部分。
  • Product(产品):由多个部件组成的复杂对象。
  • Director(指挥者):负责按照特定顺序调用建造者的方法来构建对象。

以下是 Builder 模式的 UML 类图:

Director
-builder: Builder
+construct()
«interface»
Builder
+buildPartA()
+buildPartB()
+getResult()
ConcreteBuilder
-product: Product
+buildPartA()
+buildPartB()
+getResult()
Product
-partA: String
-partB: String

代码示例

以下是一个 Java 示例,展示 Builder 模式的基本用法:

// 产品类
class Product {
    private String partA;
    private String partB;

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

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

    @Override
    public String toString() {
        return "Product [PartA=" + partA + ", PartB=" + partB + "]";
    }
}

// 抽象建造者
interface Builder {
    void buildPartA();
    void buildPartB();
    Product getResult();
}

// 具体建造者
class ConcreteBuilder implements Builder {
    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.setPartA("Part A");
    }

    @Override
    public void buildPartB() {
        product.setPartB("Part B");
    }

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

// 指挥者
class Director {
    private Builder builder;

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

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

// 客户端
public class BuilderPatternDemo {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        Product product = director.construct();
        System.out.println(product);
    }
}

动作流程

以下是 Builder 模式的动作流程图:

Client Director Builder Product 创建 Director 调用 buildPartA() 构建 PartA 调用 buildPartB() 构建 PartB 返回 Product 返回 Product Client Director Builder Product

优点

  1. 更好的代码可读性:通过分步骤构建对象,代码更清晰易读。
  2. 更灵活的构建过程:同样的构建过程可以生成不同的对象。
  3. 解耦复杂对象的构建:将对象的创建过程与表示分离。

缺点

  1. 增加代码复杂性:引入了更多的类和接口。
  2. 不适合简单对象:对于简单对象的构建,使用 Builder 模式会显得臃肿。

Android 中的 Builder 模式应用

在 Android 开发中,Builder 模式被广泛应用于对象的创建,特别是那些包含多个可选参数的对象。以下是几个典型的例子:

  1. AlertDialog.Builder

    • AlertDialog.Builder 用于创建对话框,允许设置标题、消息、按钮等。
    • 示例:
      AlertDialog dialog = new AlertDialog.Builder(context)
          .setTitle("标题")
          .setMessage("消息")
          .setPositiveButton("确定", null)
          .setNegativeButton("取消", null)
          .create();
      dialog.show();
      
  2. NotificationCompat.Builder

    • NotificationCompat.Builder 用于构建通知,允许设置图标、标题、内容等。
    • 示例:
      Notification notification = new NotificationCompat.Builder(context, "channel_id")
          .setSmallIcon(R.drawable.ic_notification)
          .setContentTitle("通知标题")
          .setContentText("通知内容")
          .build();
      NotificationManagerCompat.from(context).notify(1, notification);
      
  3. StringBuilder

    • StringBuilder 是一个经典的 Builder 模式实现,用于构建字符串。
    • 示例:
      StringBuilder builder = new StringBuilder();
      builder.append("Hello").append(" ").append("World");
      System.out.println(builder.toString());
      

总结

Builder 模式通过分离复杂对象的构建过程和表示,提供了构建复杂对象的灵活性和可读性。在 Android 开发中,它被广泛应用于各种场景,尤其是创建包含多个可选参数的对象。理解和应用 Builder 模式是编写高质量代码的重要一环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vincent(朱志强)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值