老师您好,CourseBuilder是静态内部类,为什么不直接Course.CourseBuilder?

来源:7-2 建造者模式coding

天使也很坏

2019-04-08

写回答

1回答

天使也很坏

提问者

2019-04-08

已解决!写法不同,我是用静态工厂方法,搞混了。

public class Test {
    // 外部类私有属性
  private Integer courseId;
  private String courseName;
  private Date createTime;
  // 私有的全参构造方法,只为build()方法服务
    private Test(TestBuilder testBuilder) {
        this.courseId = testBuilder.courseId;
        this.courseName = testBuilder.courseName;
        this.createTime = testBuilder.createTime;
    }
    // 公开的get方法,对外提供取值操作
    public Integer getCourseId() { return courseId; }
    public String getCourseName() { return courseName; }
    public Date getCreateTime() { return createTime; }
    // 公开的toString方法,方便打印
    @Override
    public String toString() {
        return "Test [courseId=" + courseId + ", courseName=" + courseName + ",
         createTime=" + createTime + "]";
    }
    // 公开的静态工厂方法 -- 获取建造者实例 -- 通过Test.builder()调用
    public static TestBuilder builder() { return new TestBuilder(); }
    // 静态内部类 -- 建造者 -- 必须为static class
    static class TestBuilder {
        // 内部类私有属性 -- 保持和外部类一致
        private Integer courseId;
        private String courseName;
        private Date createTime;
        // 公开的属性构造方法 -- 方法命名和属性名一致 -- 参考lombok中的@Builder注解
        public TestBuilder courseId(Integer courseId) {
            this.courseId = courseId;
            return this;
        }
        public TestBuilder courseName(String courseName) {
            this.courseName = courseName;
            return this;
        }
        public TestBuilder createTime(Date createTime) {
            this.createTime = createTime;
            return this;
        }
        // 公开的实例构建方法 -- 通过TestBuilder.build()调用 -- 只能通过builder()构建
        public Test build() { 
            return new Test(this);     // 将调用者的引用传递给构造方法构建实例对象
        }
    }
}


0
0

Java设计模式精讲-Debug方式+内存分析

系统学习设计原则,设计模式,锤炼编码内功,赢取高薪Offer

3430 学习 · 407 问题

查看课程