设计模式之构建者模式(Builder)

Builder设计模式

Demo地址

https://github.com/rocky123shine/Builder

概念

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

Builder使用场景
  1. 相同的方法,不同的执行顺序,产生不同的事件结果时;
  2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;
  3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效果,这个时候使用建造者模式非常合适;
  4. 当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时。
Builder实现和使用
Builder实现
  1. 生成一个类A,内置一个静态类,在A中声明静态类的对象
  2. A类构造方法私有化 参数为内部静态类的对象,给A中的对象赋值
  3. 在内部静态类中生成所有需要的属性,生成set方法,set方法返回内部类对象
  4. 在内部类中提供bulid方法 目的是提供A的对象
public class A {
    private Builder builder;

    private A(Builder builder) {
        this.builder = builder;
    }

    public static class Builder {
        private String name;
        private String number;
        private String price;

        public Builder setName(String name) {
            this.name = name;
            return this;
        }

        public Builder setNumber(String number) {
            this.number = number;
            return this;
        }

        public Builder setPrice(String price) {
            this.price = price;
            return this;
        }

        public A build() {
            return new A(this);
        }
    }
    ...
}
Builder使用
 A.Builder builder = new A.Builder();
 A a = builder.setName("Apple").setNumber("IphoneX").setPrice("6800").build();

这样的话把复杂的参数通过链式设置完成,避免了参数过于复杂且易乱,分不清谁是谁的问题,最后返回A的对象,这样就可以操作A中的其他方法了

Builder实际应用举例

我这里就写了一个简单的Builder,下面我举几个使用Builder的框架,以便我们深入了解和学习Builder。
例如:OKHttp、Retrofit、RxJava、ImageLoader、Volley、AlertDialog等等…都使用了Builder。
这里我们对AlertDialog是最熟悉不过的,大家可以模仿一下源码写个Demo,这样会对Builder设计模式有一个更加深刻的认识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值