Android开发经验谈Android进阶之路程序员

23种内功之--Builder模式

2017-10-26  本文已影响24人  MinuitZ

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

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

这个就是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);
        }
    }
}
UserBean build = new UserBean.UserBuilder().age(1)
                .address("xxx")
                .firstName("Ziya")
                .build();

恩~~~挺清爽的

上一篇 下一篇

猜你喜欢

热点阅读