建造者模式

建造者模式是一个创建型模式,是将一个复杂的构建过程拆分,使得同样的构建过程创建不同的表示。建造者模式适用于创建对象需要很多步骤,一些基本部件不会变,而其组合经常变化的时候。

建造者的链式写法

编写Course类:

@Data
public class Course {
    private String name;
    private String ppt;
    private String video;
    private String note;
}

编写建造Course类:

public class CourseBuilder {

    private Course course = null;

    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() {
        this.course = new Course();
    }

    public Course build(){
        return this.course;
    }
}

调用测试:

    public static void main(String[] args) {
        Course course = new CourseBuilder()
        .addName("a").addNote("note").addPpt("ppt").build();
        System.out.println(course);
------------------------------------------------------------------------------------------
Course(name=a, ppt=ppt, video=null, note=note)
    }

建造者的优缺点:

优点:

  1. 在建造者模式中, 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
    方便地替换具体建造者或增加新的具体建造者, 用户使用不同的具体建造者即可得到不同的产品对象 。
  2. 将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。
  3. 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”。

缺点:

  1. 产生多余的builder 对象。
  2. 产品内部改变,建造者也需要改变。

应用

在JDK的Stringbuilder中,它提供append()方法为我们开放构造步骤,最后调用toString()完成String的构建过程。

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{
        public StringBuilder() {
            super(16);
        }
        

      @Override
       public StringBuilder append(CharSequence s) {
            super.append(s);
            return this;
        }
···
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容