23种内功之--Builder模式

作者: MinuitZ | 来源:发表于2017-10-26 17:23 被阅读24次

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

    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();
    

    恩~~~挺清爽的

    相关文章

      网友评论

        本文标题:23种内功之--Builder模式

        本文链接:https://www.haomeiwen.com/subject/qimkpxtx.html