建造者模式

建造者模式

        特征: 只需指定需要建造的类型就可以获得对象, 建造过程及细节不需要了解。属于创建型模式

        使用场景: 创建对象需要很多步骤, 但是步骤的顺序不一定固定。如果一个对象有非常复杂的内部结构(很多属性), 可以将复杂对象的创建和使用进行分离。

@Data
public class Course {

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

    private String 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 static void main(String[] args) {

    CourseBuilder builder = new CourseBuilder();

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

    System.out.println(builder.build());
}
 
    应用: JDK中的StringBuilder, Mybatis中的CacheBuilder、SqlSessionFactoryBuilder,Spring中的BeanDefinitionBuilder。
    优点
          封装性好,创建和使用分离
          扩展性好,建造类之间独立、一定程度上解耦
      缺点
            产生多余的Builder对象
            产品内部发生变化, 建造者都要修改,不符合开闭原则
建造者模式和工厂模式的区别
    
  建造者模式 工厂模式
  建造者模式更加注重方法的调用顺序 工厂模式注重于创建对象
创建对象的力度不同 建造者模式创建复杂的对象,由各种复杂的部件组成 工厂模式创建出来的都一样
关注点 不仅要创建出这个对象,还要知道这个对象由那些部件组成 只需要把对象创建出来就可以了
  建造者模式根据建造过程中的顺序不一样,最终的对象部件组成也不一样