【Design Pattern】Builder模式的一种实现

来源:互联网 发布:mysql 删除某个字段 编辑:程序博客网 时间:2024/05/02 00:53

应用场景

如果需要根据多个不同的参数来创建某类的不同对象,很常见的方法是定义多个构造器以供不同场合下的调用。但有一种更好的构造方法,我们可以使用Builder模式来实现(前提是多个构造参数)。

示例(汽车类及其Builder构造器)
public class Car {    private final int seet;    private final String engine;    private final int dormer;    private final int speed;    private final int color;    public static class Builder{        private int seet;        private String engine;        // Optional parameters        private int dormer;        private int speed;        private int color;        public Builder(int seet, String engine){            this.seet = seet;            this.engine = engine;        }        public Builder dormer(int val){            this.dormer = val;            return this;        }        public Builder speed(int val){            this.speed = val;            return this;        }        public Builder color(int val){            this.color = val;            return this;        }        public Car build(){            return new Car(this);        }    };    private Car(Builder builder){        this.seet = builder.seet;        this.engine = builder.engine;        this.dormer = builder.dormer;        this.speed = builder.speed;        this.color = builder.color;    }}

演示制造汽车过程(不同的汽车需要不同的部件):
public class Main {    public static void main(String[] args) {        Car car1 = new Car.Builder(4, "power").dormer(1).speed(1000).color(255).build();        Car car2 = new Car.Builder(2, "awesome").speed(2000).color(122).build();    }}
这样自由组合的不停的build,是不是有点酷?

延伸
为实现更好的伸缩性,Builder类可独立出来,并且继承于某个Builder接口。另外,从上例可以看出,Builder重定义了一遍Car类的属性,其实现是需要消耗一定的性能的;所以当可选参数较少时,并不建议使用这样的Builder模式。






原创粉丝点击