什么是 Builder 模式?
Builder(建造者)模式是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。它特别适用于创建包含多个组成部分的对象,允许逐步构建对象的过程。
模式结构
Builder 模式的核心角色包括:
- Builder(抽象建造者):定义创建产品各个部分的接口。
- ConcreteBuilder(具体建造者):实现 Builder 接口,构建和装配产品的各个部分。
- Product(产品):由多个部件组成的复杂对象。
- Director(指挥者):负责按照特定顺序调用建造者的方法来构建对象。
以下是 Builder 模式的 UML 类图:
代码示例
以下是一个 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 模式的动作流程图:
优点
- 更好的代码可读性:通过分步骤构建对象,代码更清晰易读。
- 更灵活的构建过程:同样的构建过程可以生成不同的对象。
- 解耦复杂对象的构建:将对象的创建过程与表示分离。
缺点
- 增加代码复杂性:引入了更多的类和接口。
- 不适合简单对象:对于简单对象的构建,使用 Builder 模式会显得臃肿。
Android 中的 Builder 模式应用
在 Android 开发中,Builder 模式被广泛应用于对象的创建,特别是那些包含多个可选参数的对象。以下是几个典型的例子:
-
AlertDialog.Builder
:AlertDialog.Builder
用于创建对话框,允许设置标题、消息、按钮等。- 示例:
AlertDialog dialog = new AlertDialog.Builder(context) .setTitle("标题") .setMessage("消息") .setPositiveButton("确定", null) .setNegativeButton("取消", null) .create(); dialog.show();
-
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);
-
StringBuilder
:StringBuilder
是一个经典的 Builder 模式实现,用于构建字符串。- 示例:
StringBuilder builder = new StringBuilder(); builder.append("Hello").append(" ").append("World"); System.out.println(builder.toString());
总结
Builder 模式通过分离复杂对象的构建过程和表示,提供了构建复杂对象的灵活性和可读性。在 Android 开发中,它被广泛应用于各种场景,尤其是创建包含多个可选参数的对象。理解和应用 Builder 模式是编写高质量代码的重要一环。