生成器模式

软件设计模式
2021-05-17 14:29 · 阅读时长3分钟
小课

生成器模式又称为建造者模式,主要用于创建复杂的对象,这类对象通常有许多属性,需要根据业务设置或多或少的参数,如果把参数全部都放在构造方法或者初始化方法中就会显得很臃肿,通过生成器模式,我们可以把创建对象这个过程抽象出来分为多个步骤,可分为必须和非必需步骤,使用者可以根据自己的业务进行调用。

下面还是以搜索引擎为例,来看看生成器模式的套路,假设我们有一个搜索引擎类。

1public class SearchEngine {
2    private String name;
3    private String language;
4    private String fileType;
5
6    private SearchEngine(Builder builder) {
7        this.name = builder.name;
8        this.language = builder.language;
9        this.fileType = builder.fileType;
10    }
11    ...
12}

SearchEngine中name是必传参数,其它的是可选参数,根据这个特点实现Builder,我们通常会将Builder类放在其需要生成的类内部,申明为一个静态内部类,这样可以让生成器更好的控制权限。

1public static class Builder {
2    private String name;
3    private String language;
4    private String fileType;
5
6    public Builder(String name) {
7        this.name = name;
8    }
9
10    public Builder setLanguage(String language) {
11        this.language = language;
12        return this;
13    }
14
15    public Builder setFileType(String fileType) {
16        this.fileType = fileType;
17        return this;
18    }
19
20    public SearchEngine build() {
21        return new SearchEngine(this);
22    }
23}
24
25SearchEngine engine = new SearchEngine.Builder("Google")
26        .setLanguage("zh")
27        .setFileType("pdf")
28        .build();
总结

生成器模式一般是在需要生成的类中定义一个名为Builder的静态内部类,然后把需要设置的参数通过Builder暴露出来,在使用的时候可以通过链式调用来设置各种参数 ,最后通过build方法将创建好的对象返回。

通过生成器模式,可以将复杂的对象创建逻辑抽象出来,减少原来类的工作量,还能让创建对象的逻辑更加清晰、简洁。

建造者模式生成器模式builder