每天记录一个设计模式之建造者模式
建造者模式,使用建造者模式可以简化我们的代码。将开发从一些set中脱离出来
例如我们有这样一个对象类
/*这里没有显示的写出set get'方法而是使用了lombok的注解模式*/
public class Person {
@Getter
@Setter
private int personId;
@Getter
@Setter
private String personName;
public Person(){
}
}
假如我们实例一个对象,想往对象里面注入值
Person personTwo = new Person();
personTwo.setPersonId(28);
personTwo.setPersonName("个人对象一号");
但是有没有发现这样很麻烦,这样万一这个对象有很对个属性。那么我们将要调用不同的set方法很多次。
我们引出builder建造者模式
下面这是一个基于建造者模式的实体对象类
public class Person {
@Getter
@Setter
private int personId;
@Getter
@Setter
private String personName;
public static final class Builder{
private int personId;
private String personName;
public Builder personId(int personId){
this.personId = personId;
return this;
}
public Builder personName(String personName){
this.personName = personName;
return this;
}
public Person builder(){
Person person = new Person(this);
return person;
}
}
public Person(Builder builder){
this.personId = builder.personId;
this.personName = builder.personName;
}
public Person(){
}
}
那么我们在实例这个对象的时候就会很简单了
Person person = new Person.Builder().personId(18).personName("个人对象二号").builder();
是不是很简单,将以前需要多段的代码现在放在一段代码里面就行了。但是或许有人疑问,那么简单的bean set get方法 有必要搞得这么复杂吗。
有这样的想法也是对的,因为当我们的对象属性只有简单的几个的时候或许很简单,但是要是我们的属性有十多个那么就会有点复杂了。
特点
建造者模式是在当创建复杂对象的复杂算法一个独立与该对象的组成部分以及它们的装配方式时适用的模式。
举个栗子
我们可以这样实例一个对象
Person person = new Person.Builder().personId(18).builder();
我们也可以这样实例一个对象
Person person = new Person.Builder().personName("个人对象二号").builder();
还可以这样定义对象
Person person = new Person.Builder().personId(18).personName("个人对象二号").builder();
这样有没发现使用这种模式,我们创建对象代码会变的很优雅 。