Java 手写一个builder 模式构造类的示例,并讲解自己如何实现
时间: 2024-02-06 09:08:54 浏览: 37
好的,这里提供一个简单的Builder模式构造类的示例。
假设我们需要构造一个人类的类,包括姓名、年龄、性别等属性。使用Builder模式可以方便地进行构造,代码如下:
```
public class Person {
private String name;
private int age;
private String sex;
private Person(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.sex = builder.sex;
}
public static class Builder {
private String name;
private int age;
private String sex;
public Builder name(String name) {
this.name = name;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public Builder sex(String sex) {
this.sex = sex;
return this;
}
public Person build() {
return new Person(this);
}
}
}
```
在这个示例中,我们定义了一个Person类,并且使用了静态内部类的方式定义了一个Builder类。Builder类中包含了与Person类相同的属性,以及对这些属性进行设置的方法。最终,通过调用Builder类的build()方法来构造Person类的实例。
在构造Person类的实例时,我们通过调用Builder类中的方法来设置Person类的属性。这样可以避免在构造函数中传入大量参数的情况,使得代码更加清晰易懂。
另外,需要注意的是,我们在Person类的构造函数中使用了Builder类中的属性来进行构造。这样可以保证Person类的属性与Builder类中的属性一一对应,避免了属性设置时出现的错误。
至于如何实现,我们只需要在类中定义一个静态内部类Builder,将需要构造的属性作为Builder类中的属性,同时定义对这些属性进行设置的方法。在Builder类中定义一个build()方法,通过调用Person类的构造函数来构造Person类的实例,即可完成Builder模式的实现。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)