簡體   English   中英

Builder模式中的靜態類成員應該是最終成員嗎?

[英]Should members of static class in Builder pattern be final?

因此,我已經在Builder Pattern上看到了幾個示例。 總之,靜態類或Builder只有那些最終可以由構造函數初始化的成員。 范例-

public class User {
        private final String firstName; // required
        private final String lastName; // required
        private final int age; // optional

    private User(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 static class UserBuilder {
            private final String firstName;
            private final String lastName;
            private int age;

    public UserBuilder(String firstName, String lastName) {
                this.firstName = firstName;
                this.lastName = lastName;
            }

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

為什么只有名和姓是最終的,可以由構造函數初始化? 那之后不能設置嗎? 我的疑問是我是否不能從First和Last中刪除final並擁有一個初始化所有三個成員並在類中也具有對應的setter的構造函數?

這里的設計是必須始終設置名字和姓氏,但是年齡是可選的。 (我會在這里使用Integer ,而不是默認為0 ...但是我還是想使用birthDate ...但我離題了。)

通過強制在構造中顯示名字和姓氏來傳達“必需與可選”部分,那么您為什么還想要二傳手? 您何時要在構造函數中將名字設置為一個事物,然后進行更改?

可以將字段設置為非最終值,並添加設置器...我只是認為這樣做不是一件特別好的事情。 這不是任何失敗的問題,而只是通過API設計傳達的信息的變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM