建造者模式大家可能听起来会比较陌生,但是看完下面的代码大家应该就明白是怎么回事了.假设我们有一个Student对象,有name , age , sex三个变量,同时我们要创建一个名字叫张三,年龄18,性别男的实例对象,按以往的写法,大家都会这么创建:
首先写一个Student类
public class Stduent {
private String name ;
private String age ;
private String sex ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String toString(){
return "姓名:"+name+" 年龄:"+age+" 性别:"+sex;
}
}
接下来写一个测试类
public class MyTest {
public static void main(String[] args){
Stduent stduent = new Stduent();
stduent.setName("张三");
stduent.setAge("18");
stduent.setSex("男");
System.out.println(stduent.toString());
}
}
打印结果如下
姓名:张三 年龄:18 性别:男
但是如果换种写法会不会比较简单明了,看起来更清爽?像下面这样
public class MyTest{
public static void main(String[] args) throws CloneNotSupportedException {
Student student = new Student
.Builder()
.name("张三")
.age("18")
.sex("男").build();
System.out.println(student.toString());
}
}
这就是本篇要总结的建造者模式,接下来先上代码,再分析如何实现这种链式结构的.
public class Student {
private String name ;
private String age ;
private String sex ;
private Student(Builder builder){
this.name = builder.getName();
this.age = builder.getAge();
this.sex = builder.getSex();
}
public static class Builder{
private String name ;
private String age ;
private String sex ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Builder name(String name){
this.name = name;
return this;
}
public Builder age(String age){
this.age = age;
return this;
}
public Builder sex(String sex){
this.sex = sex;
return this ;
}
public Student build(){
return new Student(this);
}
}
public String toString(){
return "姓名:"+this.name+" 年龄:"+this.age+" 性别:"+this.sex;
}
}
我们开始分析这种写法的过程
- 创建一个Student对象,定义好各个变量
- 创建一个静态内部类Builder,并且它拥有和Student同样的变量。
- 在静态内部类中定义好赋值每个变量的方法,且返回值都是这个Builder对象,如果不统一返回这个Buider对象,那么就无法连续调用这个Builder的方法,也就是链式结构的核心。
- 将Student的构造方法私有化,让它只能通过Builder实例来赋值变量。
- 在Builder类里定义一个方法,让它与外部Student类产生关联,将所被赋值的变量都传递给外部的Student对象.
其实建造者模式还是比较好理解的,还有一种实现方式是通过抽象类的方式实现,有兴趣的小伙伴可以自己去查看一下,建造者模式就总结到这里啦,觉得有帮助记得点个赞~
网友评论