Java中的Builder模式

前言

Builder模式是一种一步一步创建一个复杂对象的设计模式,这种设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型;其二,对于设计者来说,这是一个解耦的过程,这种设计模式可以将构建的过程和具体的表示分离开来。

Builder模式的使用场景

  • 相同的方法,不同的执行顺序,产生不同的时间结果
  • 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不同时
  • 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候用建造者模式非常适合
  • 当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值

示例

public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public static Builder builder() {
        return new Builder();
    }

    private User(Builder builder) {
        this.username = builder.username;
        this.password = builder.password;
    }

    public static class Builder {
        private String username;
        private String password;

        public Builder setUserName(String username) {
            this.username = username;
            return this;
        }
        public Builder setPassword(String password){
            this.password=password;
            return this;
        }
        public User build() {
            return new User(this);
        }

        @Override
        public String toString() {
            return "Builder{" +
                    "username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
    }
    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public static void main(String[] args) {
        Builder builder = new User.Builder();
        builder.setUserName("lss0555")
                .setPassword("12345")
                .build();
        //或者
        User user = new User.Builder().setUserName("lss0555").setPassword("123123").build();
        //或者
        User user1 = User.builder().setUserName("lss0555").setPassword("654321").build();

        System.out.println("builder结果:"+builder.toString());
        System.out.println("User结果:"+user.toString());
        System.out.println("User2结果:"+user1.toString());
    }
}
结果

builder结果:Builder{username=’lss0555’, password=’12345’}
User结果:User{username=’lss0555’, password=’123123’}
User2结果:User{username=’lss0555’, password=’654321’}

总结

Builder模式与传统的模式相比,Builder模式的代码量会比正常多不少,但是随之带来的好处是代码的可读性和可维护性。但是,往往一个好的设计模式或架构,就是在牺牲某一种能力从而大大增强另一种能力,例如,牺牲一定的可读性,增加项目的可扩展性等等这样的方式。因此,在参数较为复杂,构造对象相对繁琐的情况下,可以考虑使用Builder模式。

猜你喜欢

转载自blog.csdn.net/u010520146/article/details/81744393