原创

Java设计模式:构造者(Builder)模式

一、为什么要用Builder模式

Builder模式是为了弥补Java语言设计上的不足,话不多说,下面我们一起来看个栗子就知道啦!

public class User{

    String name;
    int age;
    String email;
    String address;

    public User(){
    }

    //想要有名字和邮箱的构造器
    public User(String name, String email){
        this.name = name;
        this.email = email;
    }

    //想要有名字和地址的构造器
    public User(String name, String address){
        this.name = name;
        this.address = address;
    }
}

在上面代码中,很容易可以发现,在我们正常的需求下,Java构造器的编写将会出问题,由于参数个数和类型一样无法构成重载,所以这样写是不行的,那么Builder模式就是为了解决这种情况而出现的。

二、Builder模式的实现

下面我们一起来看一下Builder模式如何编写的:

public class User {

    String name;
    int age;
    String phone;
    String email;
    String address;

    //注意无参构造器私有,避免外界使用构造器创建User对象
    private User() {
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", phone=" + phone + ",                 
                email=" + email + ", address=" + address
                + "]";
    }

    public static class Builder {

        private String name;
        private int age;
        private String phone;
        private String email;
        private String address;

        public Builder() {
        }

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

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

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

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

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

        public User build() {
            User user = new User();
            user.name = name;
            user.age = age;
            user.email = email;
            user.phone = phone;
            user.address = address;
            return user;
        }
    }
}

根据上面的代码,我们可以看出来,就是在User内部创建一个内部类,并且拥有和User一样的字段(属性),并且提供SET方法,最重要的是要提供一个能够返回User对象的方法(build),这样才能通过Builder来创建User对象。

Builder设计模式还有一个好处,那便是我们可以随意组合输入的参数,不仅避免了重载出错的问题,还不需要写过多的构造器。

下面我们一起看看写完Builder模式类之后如何来调用:

public class UserTest {

    public static void main(String[] args) {
        User u = new User.Builder().setName("bob").setAge(22).build();
        System.out.println(u);
    }

}

不难发现,我们是new一个User下的Builder类的对象,并且设置各种参数之后调用返回User对象的方法,最终实现User方法的创建。这就是Java的Builder设计模式,是不是很简单?快点get起来吧!!

参考资料:
Java设计模式:构造者(Builder)模式 https://blog.csdn.net/procedure_bear/article/details/81151925
设计模式之构建者模式(Builder):初步理解 https://www.cnblogs.com/cc11001100/p/5939220.html

正文到此结束
本文目录