使用静态内部类实现建造者模式
事实上,在平时编写代码时,我们通常都会忽略对象的复杂性,优先考虑使用工厂模式创建对象,而不是建造者模式。因为工厂模式和建造者模式的作用都是创建一个产品对象,相对于建造者模式来说,工厂模式没有抽象建造者和指挥者,所以结构更加简洁直接,因此更常使用。
一般情况下,我们更习惯使用静态内部类的方式实现建造者模式,即一个产品类内部自动带有一个具体建造者,由它负责该产品的组装创建,不再需要 Builder 和 Director。这样做可以使产品表示与创建之间的联系更加紧密,结构更加紧凑,同时使得建造者模式更加简洁。
如果采用静态内部类形式实现建造者模式,则《建造者模式实现链式赋值》一节的示例可以改写如下。
一般情况下,我们更习惯使用静态内部类的方式实现建造者模式,即一个产品类内部自动带有一个具体建造者,由它负责该产品的组装创建,不再需要 Builder 和 Director。这样做可以使产品表示与创建之间的联系更加紧密,结构更加紧凑,同时使得建造者模式更加简洁。
如果采用静态内部类形式实现建造者模式,则《建造者模式实现链式赋值》一节的示例可以改写如下。
public class Course {
private String name;
private String means;
private String note;
private String homework;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMeans() {
return means;
}
public void setMeans(String means) {
this.means = means;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public String getHomework() {
return homework;
}
public void setHomework(String homework) {
this.homework = homework;
}
@Override
public String toString() {
return "CourseBuilder{" + "name='" + name + '\'' + ",means='" + means + '\'' + ",note='" + note + '\'' + ",homework='" + homework + '\'' + '}';
}
public static class Builder {
private Course course = new Course();
public Builder addName(String name) {
course.setName(name);
return this;
}
public Builder addMeans(String means) {
course.setMeans(means);
return this;
}
public Builder addNote(String note) {
course.setNote(note);
return this;
}
public Builder addHomework(String homework) {
course.setHomework(homework);
return this;
}
public Course build() {
return course;
}
}
客户端测试代码如下:
public static void main(String[] args) {
CourseBuilder builder = new CourseBuilder().addName("设计模式").addMeans("教程资料").addNote("课堂笔记").addHomework("课后作业");
System.out.println(builder.build());
}
运行结果如下:
CourseBuilder{name='设计模式',means='教程资料',note='课堂笔记',homework='课后作业'}
使用静态内部类实现建造者模式会使代码看上去更加整洁,不会让人感觉到多了一个类。所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算