23种内功之--Builder模式

首先感谢前辈的经验
看对话框的创建吧 , 相信大家都用过的

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        AlertDialog alertDialog = builder
                .setCancelable(false)
                .setTitle("123")
                .setIcon(R.mipmap.ic_launcher_round)
                .create();

这个就是Builder模式的一个很好的例子
Builder模式可以用在对一个复杂对象的创建, 当你有很多必填的参数时候 , 直接写在构造方法中是不合理的 , 过多的参数容易让人搞混 , 而且可读性极差.
这时候 , 你可以考虑一下使用Builder模式了.

  • Builder模式可以让对象有良好的封装性 , 客户端不必知道产品内部的组成细节
  • 建造者独立 , 容易扩展 , 只需要修改内部类即可扩展.

1. 定义

将复杂对象的构建和表示进行分离 ,是的同样的构建过程可以不同的表示.
用过RxJava的老哥肯定能明白这句话的意思了 , 创建对象的过程就像是积木的拼接 , 不同的拼接方式得到的对象 , 功能也各不相同.
这里不介绍传统的Builder模式了,感觉有点复杂

2. 代码

代码也比较简单 这里直接贴上

public class UserBean {

    //对象具有多个属性
    private String firstName;
    private String lastName;
    private int age;
    private String phone;
    private String address;

    //私有构造方法, 接收一个内部类对象
    private UserBean(UserBuilder builder) {
        this.firstName = builder.firstName;
        this.lastName = builder.lastName;
        this.age = builder.age;
        this.phone = builder.phone;
        this.address = builder.address;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public String getPhone() {
        return phone;
    }

    public String getAddress() {
        return address;
    }

    //内部Builder类
    public static class UserBuilder {
        private String firstName;
        private String lastName;
        private int age;
        private String phone;
        private String address;

        public UserBuilder() {
        }

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

        public UserBuilder phone(String phone) {
            this.phone = phone;
            return this;
        }

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

        public UserBuilder firstName(String firstName) {
            this.firstName = firstName;
            return this;
        }

        public UserBuilder lastName(String lastName) {
            this.lastName = lastName;
            return this;
        }

        public UserBean build() {
            return new UserBean(this);
        }
    }
}
  • 首先屏蔽了构造函数 , 使用private关键字
  • 内部类的每个public函数都是用来设置各种属性的, 最终返回值都为this , 这样就可以通过链式调用 , 而调用之后的结果仍为本身
  • 最后通过build()方法, 创建类对象 , 本质上就是调用了类的构造方法.
    最后通过链式调用即可成功的创建出对象
UserBean build = new UserBean.UserBuilder().age(1)
                .address("xxx")
                .firstName("Ziya")
                .build();

恩~~~挺清爽的

    原文作者:MinuitZ
    原文地址: https://www.jianshu.com/p/6c20ac7bace7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞