建造者模式更多的是写法上的不同,从代码结构层面上其实没有很大的区别,只是看起来会更清爽一些。
那怎么实现建造者模式呢?其实也非常简单:
- 在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就可以使用建造者模式的代码了,非常方便
