您当前的位置: 首页 >  ui
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

一眼就会的建造者模式Builder

沙漠一只雕得儿得儿 发布时间:2019-03-13 16:32:47 ,浏览量:0

1.构造一个普通的bean:
public class Person {
    private String name;
    private int age;
    private double height;
    private double weight;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }
}
2.在内部添加一个静态内部类,就是我们的builder:
public static class Builder {
        private String name;
        private int age;
        private double height;
        private double weight;

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

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

        public Builder height(double height) {
            this.height = height;
            return this;
        }

        public Builder weight(double weight) {
            this.weight = weight;
            return this;
        }

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

    }

    从上面的代码中我们可以看到,我们在Builder类里定义了一份与Person类一模一样的变量,通过一系列的成员函数进行设置属性值,但是返回值都是this,也就是都是Builder对象,最后提供了一个build函数用于创建Person对象,返回的是Person对象,对应的构造函数在Person类中进行定义,也就是构造函数的入参是Builder对象,然后依次对自己的成员变量进行赋值,对应的值都是Builder对象中的值。此外Builder类中的成员函数返回Builder对象自身的另一个作用就是让它支持链式调用,使代码可读性大大增强。

3.Builder内部类返回外部类的私有构造函数
    private Person (Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.height = builder.height;
        this.weight = builder.weight;
    }

经过上面简单的三步,我们的builder就建设完成了,下面我们就可以使用了:

Person.Builder builder = new Person.Builder();

Person person = builder.age(12)
                .name("buder")
                .height(181)
                .weight(80)
                .build();

打印log可以看到属性都设置成功:

常见使用builder模式的地方:

1.Android中对话框的创建

2.java中的StringBuilder和StringBuffer

3.著名的网络请求框架OkHttp 的request请求和响应

可见各大框架中大量的运用了Builder模式。最后总结一下

  • 定义一个静态内部类Builder,内部的成员变量和外部类一样
  • Builder类通过一系列的方法用于成员变量的赋值,并返回当前对象本身(this)
  • Builder类提供一个build方法或者create方法用于创建对应的外部类,该方法内部调用了外部类的一个私有构造函数,该构造函数的参数就是内部类Builder
  • 外部类提供一个私有构造函数供内部类调用,在该构造函数中完成成员变量的赋值,取值为Builder对象中对应的值

项目的实例:https://github.com/buder-cp/base_component_learn/tree/master/buildermodel

参考:https://www.cnblogs.com/android-blogs/p/5530239.html

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0360s