建造者模式(Builder Pattern)是将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建创建不同的表示,属于创建型模式。
建造者模式的设计有四个角色;
1、产品:要创建的产品类对象
2、建造者抽象:建造者的抽象类,规范产品对象的各个组成部分的构建,一般由子类实现具体的监造过程。
3、建造者:具体的Builder类,根据不同的业务逻辑,具体化对象的各个组成部分的创建。
4、调用者:调用具体的建造者,来创建对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
优点:
1、封装性好,创建和使用分离
2、扩展性好,建造类之间独立,一定程度上解耦。
缺点:
1、产生多余的Builder对象,
2、产品内部发生变化,建造者都要修改,成本较大。
应用场景:
1、相同的方法、不同的执行顺序,产生不同的结果时。
2、多个部件或零件,都可以装配到一个对象中,但是产生的结果又不相同。
3、产品类非常复杂,或者产品类中的调用顺序不同产生不同的作用。
4、当初始化一个对象特别复杂,参数多,而且很多参数都具有默认值时。
代码示例:
@Data
public class BuilderEntiry {
private String name;
private Integer age;
private List<String> names;
public BuilderEntiry addName(String name){
this.setName(name);
return this;
}
public BuilderEntiry addAge(Integer age){
this.setAge(age);
return this;
}
public BuilderEntiry addNames(List<String> names){
this.setNames(names);
return this;
}
public BuilderEntiry builder(){
return this;
}
}
public class Test {
public static void main(String [] args){
String[] a={"123","123"};
BuilderEntiry test = new BuilderEntiry().addName("test").addNames(Arrays.asList(a)).addAge(22).builder();
System.out.println(test);
}
}
输出:
BuilderEntiry(name=test, age=22, names=[123, 123])
建造者模式和工厂模式的区别:
1、建造者模式更注重方法的调用顺序,工厂模式注重于创建对象。
2、建造者创建复杂的对象都是由各种复杂的部件组成,工厂模式创建的都一样。
3、注重点不一样:建造者不仅要把对象创建出来还要知道由那些部件组成,工厂模式只要把对象创建出来即可。
4、建造者模式根据建造过程中的顺序不一样,最终对象部件组成也不一样。
源码案例:
StringBuilder
CacheBuilder
SqlSessionFactoryBuilder
来源:oschina
链接:https://my.oschina.net/u/4483459/blog/3209949