o0w0o / ARTS

ARTS 鸽友打卡🐦
2 stars 0 forks source link

builder模式创建java对象 #147

Open hitolz opened 5 years ago

hitolz commented 5 years ago

https://www.vogella.com/tutorials/DesignPatternBuilder/article.html

简化对象的创建,减少臃肿的set方法 可以创建不变的对象


public class TestClass {
    private int     id;
    private String  summary     = "";
    private String  description = "";
    private boolean done        = false;
    private Date    dueDate;

    private TestClass(int id, String summary, String description, boolean done, Date dueDate) {
        super();
        this.id = id;
        this.summary = summary;
        this.description = description;
        this.done = done;
        this.dueDate = dueDate;
    }

    private TestClass() {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public String getDescription() {
        return description;
    }

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

    public boolean isDone() {
        return done;
    }

    public void setDone(boolean done) {
        this.done = done;
    }

    public Date getDueDate() {
        return dueDate;
    }

    public void setDueDate(Date dueDate) {
        this.dueDate = dueDate;
    }

    @Override
    public String toString() {
        return "TestClass [id=" + id + ", summary=" + summary + ", description=" + description + ", done=" + done + ", dueDate=" + dueDate + "]";
    }

    public static class TestClassBuilder {
        private int     id;
        private String  summary     = "";
        private String  description = "";
        private boolean done        = false;
        private Date    dueDate;

        public TestClassBuilder id(int id) {
            this.id = id;
            return this;
        }

        public TestClassBuilder summary(String summary) {
            this.summary = summary;
            return this;
        }

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

        public TestClassBuilder done(boolean done) {
            this.done = done;
            return this;
        }

        public TestClassBuilder dueDate(Date dueDate) {
            this.dueDate = dueDate;
            return this;
        }

        public TestClass builder() {
            return new TestClass(this.id, this.summary, this.description, this.done, this.dueDate);
        }
    }
}

创建对象

public class Test {
    public static void main(String[] args) {

        TestClass error = new TestClass();

        TestClass testClass = new TestClass.TestClassBuilder()
            .id(1)
            .summary("summary")
            .description("description")
            .done(true)
            .builder();
        System.out.println(testClass.toString());
    }
}