构建器模式:我们不能简化构建器对象的创建吗?

问题描述 投票:-1回答:1

只是绕过Builder模式,我有几个(新手)问题。主要是为什么我们不能仅简化构建器对象的创建?

代替此:

public final class Person{

    private final String name;
    private final String description;

    private Person(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    public static class Builder {
        private String name;
        private String description;

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

        public Builder setDescription(String description) {
            this.description = description;
            return this;
        }

        public Person build() {
            return new Person(name, description);
        }

    }

}

//Use it
Person p = new Person.Builder().setName("test").setDescription("description").build();

为什么不只使用这个?

public final class Person {

    private String name;
    private String description;

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    } 

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

    public Person setDescription(String description){
       this.description=description;
       return this; 
    }
}

//Use it
Person p = new Person().setName("test").set("description");

我看到当您要构建一个不可变对象时,也许会使用第一个对象,但是除此之外,为什么我不能只使用第二个对象呢?这要简单得多。请尽可能提供示例。

java design-patterns builder builder-pattern
1个回答
0
投票

如果人们必须使用非空名称怎么办?您应该不能创建无效的Person对象。构造Person对象确定地的默认方法不应使无效对象。那只是自找麻烦。

随着班级变得越来越复杂,您可能会遇到各种各样的规则,这些规则如何使人们不遵循这些规则。当您更改班级时,将会有新的规则被现有的用途所遵循。

© www.soinside.com 2019 - 2024. All rights reserved.