建造者模式更多的是写法上的不同,从代码结构层面上其实没有很大的区别,只是看起来会更清爽一些。
那怎么实现建造者模式呢?其实也非常简单:
- 在domain类上创建一个静态内部类 Builder,Builder拥有domain所有的属性
- 在domain类上创建一个
private
的构造函数,参数为Builder类型,里边将Builder的属性赋值给domain的属性 - 在Builder内部类创建domain属性的赋值方法,返回值是Builder
- Builder内部类创建一个
build
方法,返回domain实例
public class MessageTask {
private String taskId;
private String content;
private String messageId;
private String taskName;
private MessageTask(Builder builder) {
this.taskId = builder.taskId;
this.content = builder.content;
this.messageId = builder.messageId;
this.taskName = builder.taskName;
}
public static class Builder{
private String taskId;
private String content;
private String messageId;
private String taskName;
public Builder setTaskId(String taskId) {
this.taskId = taskId;
return this;
}
public Builder setContent(String content) {
this.content = content;
return this;
}
public Builder setMessageId(String messageId) {
this.messageId = messageId;
return this;
}
public Builder setTaskName(String taskName) {
this.taskName = taskName;
return this;
}
// 创建build方法,返回实例
public MessageTask build() {
return new MessageTask(this);
}
}
}
使用
MessageTask.Builder builder = new MessageTask.Builder();
MessageTask task = builder.setContent("关注 Java3y 吧 >>")
.setTaskId("3y")
.setTaskName("一起来玩")
.setMessageId(String.valueOf(ThreadLocalRandom.current().nextLong()))
.build();
我们如果使用了Lombok
后,在类上加上一个注解@Builder
就可以使用建造者模式的代码了,非常方便