Android设计模式之Buidler模式

Buidler模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。貌似这个定义并没有什么卵用,因为还是看不明白啥是Builder模式。

我的理解就是Builder模式是想要什么就添加什么,很灵活

下面看一段代码:

Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(baseUrl)
                .client(new OkHttpClient())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        return  retrofit;
是不是很熟悉的感觉,创建一个Retrofit的对象的时候就是用的Builder模式。那么为什么要用Builder模式呢,优点在哪里呢?
  1. 链式结构,看起来很清爽
  2. 灵活:我需要添加client()方法我可以直接去添加,而且不需要关心顺序问题,也可以把这个方法写在baseurl()之前的

接下来我们自己来写一个Builder模式的类:

public class Person {

    private String name;
    private int age;
    private String address;

    private Person(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.address = builder.address;
    }

    public String getName() {
        return name;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static class Builder {

        private String name;
        private int age;
        private String address;

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

        public Builder addAge(int age) {
            this.age = age;
            return this;
        }

        public Builder addAddress(String address) {
            this.address = address;
            return this;
        }

        public Person builder() {
            return new Person(this);
        }
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}
这就是一个简单的Person实体类,有三个属性,分别为name、age、address。在Person的构造方法里传了一个Builder静态内部类,在Builder这个类里面添加了3个方法,分别是addName(String name)、addAge(int age)、addAddress(String address).而且在这三个方法都是返回一个Builder。 最后再看看builder()方法,在这里是返回最终的Person类;所以在初始化这个对象的时候,只需要将我们要添加的东西添加进去,最后调用Builer的builder()方法就能得到对象啦。

在其他地方初始化Person:

  Person.Builder builder=new Person.Builder();
          Person person = builder.addName("张三")
                  .addAge(22)
                  .addAddress("上海市,普陀区")
                  .builder();

          Log.d(TAG, "onCreate() returned: " + person.toString());
这样就可以了,最后再看一下打印结果:
 11-29 01:59:31.641 3127-3127/me.gcg.builder D/MainActivity: onCreate() returned: Person{name='张三', age=22, address='上海市,普陀区'}
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值