建造者模式实现链式赋值
以新宝库的辅导班为例,一个辅导班的课程由教程资料、学习笔记和课后作业组成,但是这些内容的设置顺序可以随意调整,我们用建造者模式来代入理解一下。
首先创建一个课程类 Course。
下面再来看一下类图的变化,如下图所示:
首先创建一个课程类 Course。
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 + '\'' + '}'; } }然后创建建造者类 CourseBuilder,将复杂的过程封装起来,创建步骤由用户决定。
public class CourseBuilder { private Course course = new Course(); public CourseBuilder addName(String name){ course.setName(name); return this; } public CourseBuilder addMeans(String means){ course.setMeans(means); return this; } public CourseBuilder addNote(String note){ course.setNote(note); return this; } public CourseBuilder 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
- 大数据
- 云计算