在日常的开发工作中,我们常常需要创建一些复杂的对象。这些对象可能包含许多不同的属性,并且这些属性的初始化过程可能相当复杂。在这种情况下,建造者模式是一种非常有用的设计模式,因为它允许我们分步骤地创建复杂的对象。
概念和原理:
建造者模式(Builder Pattern)是一种创建型设计模式,它用于构建复杂的对象。这种模式通常用于构建具有许多属性的对象,并且允许用户通过使用一组流畅的API逐个设置这些属性,而不是通过使用大量的构造函数参数去设置。
它的工作原理就是将复杂对象的构建与其表示分离。这说明我们可以使用一个建造者对象来创建和配置一个复杂的对象,而不需要了解这个复杂对象的内部工作原理。这样可以使代码更加灵活,更容易维护和扩展。
一、代码示例
1.1 普通使用
我们先定义一个“手机”类,这个对象有许多属性,比如品牌、内存、价格等… 并且每个属性对对象的构建过程都有特定的要求。我们可以使用建造者模式来逐步构建和配置这个对象。
public class Phone {
// 品牌
private String brand;
// 内存
private String memory;
// 价格
private int price;
private Phone(Builder builder) {
this.brand= builder.brand;
this.memory = builder.memory;
this.price= builder.price;
}
public static class Builder {
private String brand;
private String memory;
private int price;
public Builder setBrand(String brand) {
this.brand= brand;
return this; // 返回当前对象,以便进行链式调用
}
public Builder setMemory(String memory) {
if (memory!= null && !memory.isEmpty()) { // 验证memory是否有效
this.memory= memory;
} else {
throw new IllegalArgumentException("Invalid memory specification");
}
return this;
}
public Builder setPrice(int price) {
if (price> 0) { // 验证price是否有效
this.price= price;
} else {
throw new IllegalArgumentException("price must be greater than 0");
}
return this;
}
public Phone build() {
return new Phone(this);
}
}
// 省略getter和setter方法...
}
现在,我们可以使用建造者模式来创建“手机”对象:
Phone phone = new Phone.Builder()
.setBrand("小米")
.setMemory("512G")
.setPrice(2999)
.build();
这样,我们就可以通过链式调用的方式逐步设置和构建“电脑”对象,并验证每个属性的有效性。此外,通过将构建过程封装在建造者类中,我们可以更加灵活地改变对象的创建过程,而不需要去修改表示的代码。
1.2 使用lombok
这就不得不请出我们java开发的必备神器了哈哈,Lombok
是一个Java库,它可以通过注解自动创建getter、setter、equals、hashCode和toString方法,从而减少模板代码的数量。Lombok也可以与建造者模式可以一起使用,以进一步简化代码:
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class Phone {
private String brand;
private String memory;
private int price;
}
我们使用了Lombok的@Data
注解来自动生成getter、setter等方法。@Builder
注解告诉Lombok生成一个建造者类,该类具有与Phone类相同的属性,并提供链式调用的方法来设置这些属性。
然后我们可以和前面一样创建“手机”对象:
Phone phone = new Phone.Builder()
.setBrand("苹果")
.setMemory("512G")
.setPrice(8999)
.build();
因为@Builder
注解会自动为Phone类生成一个名为PhoneBuilder的静态内部类,该类具有与原始类相同的属性,并且每个属性都有一个返回此构建器的方法。所以这使得我们可以使用链式调用方式来设置属性并构建对象。文章来源:https://www.toymoban.com/news/detail-702227.html
二、使用建造者模式的好处
- 链式调用: 建造者模式允许我们通过链式调用的方式来设置对象的属性,这使得代码更加清晰和易于阅读。
- 易于维护: 如果对象具有很多属性,并且这些属性的初始化过程很复杂,那么使用建造者模式可以使得代码更加模块化,更容易理解和维护。
- 分离对象构造和表示: 建造者模式将对象的构造和表示分离开来,使得我们可以灵活地改变对象的创建过程,而不需要去修改表示的代码。
三、使用注意事项
- 对于简单的对象,使用建造者模式可能会过度复杂化代码,所以在决定是否使用建造者模式时,需要权衡利弊。
- 需要注意避免在建造者模式中产生不必要的代码重复。比如,如果不同的方法需要使用相同的属性,那么应该避免在每个方法中都重复创建相同的属性。
四、总结
建造者模式是一种非常有用的设计模式,尤其适用于创建具有很多属性的复杂对象。通过链式调用的方式来设置对象的属性,使得代码更加清晰和易于阅读。同时,将对象的构造和表示分离开来,使得我们可以灵活地改变对象的创建过程。然而,对于简单的对象,使用建造者模式可能会过度复杂化代码,因此在使用时需要权衡利弊。总的来说,掌握好建造者模式,可以让我们的代码更加清晰、易于维护和理解,快使用起来吧 ~文章来源地址https://www.toymoban.com/news/detail-702227.html
到了这里,关于Java设计模式之建造者模式详解(Builder Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!