Android设计模式之Builder模式

一、定义:

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

二、核心思想:

        分离构造与表示:将对象的构建过程(如参数组合、校验逻辑)与对象本身分离。

        链式调用:通过 return this 实现链式语法,提升代码可读性。

        可选参数处理:避免构造方法重载爆炸,灵活处理可选参数。

三、组成:

        Product:需要构建的复杂对象,比如AlertDialog。

        Builder:定义构建步骤的抽象方法,比如AlertDialog.Builder。

        ConcreteBuilder:实现构建逻辑,最终提供build()方法返回对象。

        Director:可选角色,负责控制构建流程,Android中通常省略这一步。

四、案例:Android源码的AlertDialog.Builder

// 使用 Builder 模式构建 AlertDialog
AlertDialog dialog = new AlertDialog.Builder(context)

    .setIcon(R.drawable.icon)
    .setTitle("提示")
    .setMessage("确定删除吗?")
    .setPositiveButton("确定", (d, which) -> { /* 点击事件 */ })
    .setNegativeButton("取消", null)
    .create();

dialog.show();

源码解析:

1.Builder类将AlertDialog相关参数放到AlertController.AlertParams成员变量P中,Builder类调用create方法创建AlertDialog对象,在create里通过P.apply方法将变量P传入AertDialog的mAlert对象中。

2.调用show方法,显示这个对话框。show方法通过dispatchOnCreate方法调用AlertDialog的onCreate方法,然后调用AlertDialog的onStart方法,最后将Dialog的DecorView添加到WindowManager中。

3.AlertDialog的onCreate方法主要调用了AlertController的installContent方法,installContent方法最终调用Window对象的setContentView方法,类似于Activity一样。

五、优缺点:

        优点:参数灵活,代码可读性高,对象不可变性,构建过程可控。

        缺点:代码冗余,轻微影响性能,但几乎可以忽略不计。

六、适用场景:

        1.参数多且可选,需要构建不同的实例,如网络请求,图片加载,复杂的配置对象。

        2.需要不可变对象,通过Builder一次性构建,后期使用不需要再改变参数。

        3.构建过程复杂,需要根据不同需求或条件去构建不同的对象。

七、与其他模式对比

        工厂模式:关注对象创建的整体性,而Builder模式强调分步构建。

        构造方法:参数过多时,重载方法会异常的多,难以维护,而Builder的链式调用更为清晰易懂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木子庆五

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

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

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

打赏作者

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

抵扣说明:

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

余额充值