一. 类型

创建型模式

二. 定义

建造者模式 是将一个复杂对象的构建与他的表示分离, 使得同样的构建过程可以创建不同的表示.

特征: 用户只需要指定需要创建的类型就可以获得对象, 建造过程及细节不需要了解.

三. 优缺点

优点

封装性好, 创建和使用分离.

扩展性好, 建造类之间独立、一定程度上解耦.

缺点

产生多余的 Builder 对象

产品内部发生改变, 建造者都要修改, 成本较高

四. 简单写法

/**
 * 实体类
 */
@Data
public class Course {

    private String name;
    private String ppt;
    private String video;
    private String note;

    private String homework;

    @Override
    public String toString() {
        return "CourseBuilder{" +
                "name='" + name + '\'' +
                ", ppt='" + ppt + '\'' +
                ", video='" + video + '\'' +
                ", note='" + note + '\'' +
                ", homework='" + homework + '\'' +
                '}';
    }
}
/**
 * 建造者类
 */
public class CourseBuilder{

    private Course course = new Course();

    public CourseBuilder addName(String name) {
        course.setName(name);
        return this;
    }
    
    public CourseBuilder addPPT(String ppt) {
        course.setPpt(ppt);
        return this;
    }
    
    public CourseBuilder addVideo(String video) {
        course.setVideo(video);
        return this;
    }
    
    public CourseBuilder addNote(String note) {
        course.setNote(note);
        return this;
    }
    
    public CourseBuilder addHomework(String homework) {
        course.setHomework(homework);
        return this;
    }
    
    public Course build() {
        return course;
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        CourseBuilder builder = new CourseBuilder();

        builder.addName("设计模式")
                .addPPT("【PPT课件】")
                .addVideo("【回放视频】")
                .addNote("【课堂笔记】")
                .addHomework("【课后作业】");

        System.out.println(builder.build());
    }
}
执行结果
-------------------------------------------------------------------------------------------------------------------------------
CourseBuilder{name='设计模式', ppt='【PPT课件】', video='【回放视频】', note='【课堂笔记】', homework='【课后作业】'}
-------------------------------------------------------------------------------------------------------------------------------
最后修改:2022 年 06 月 23 日
如果觉得我的文章对你有用,请点个赞吧~