终于懂了建造者模式
时间:2022-07-22
本文章向大家介绍终于懂了建造者模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
介绍
我认为把知识给别人讲会,讲明白,自己才彻底明白。 努力把文章写好,写明白每一篇文章,分享给更多人。 一个赞、一个评论、一个关注,真的好开心,努力没有白费,得到了这么多人的认可。
文章目录
建造者模式
定义:
将一个复杂对象的创建与他的表示分离,使得同样的构建过程可以构建不同的表示。
产品类
package Builder;
/**
* @Auther: truedei
* @Date: 2020 /20-4-29 20:43
* @Description:
*/
public class ProductBook {
private String bookName;
private int bookId;
public ProductBook() {
}
public ProductBook(String bookName, int bookId) {
this.bookName = bookName;
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId = bookId;
}
@Override
public String toString() {
return "ProductBook{" +
"bookName='" + bookName + ''' +
", bookId=" + bookId +
'}';
}
}
抽象方法类
package Builder;
/**
*抽象方法
*/
public interface ProductBuilder {
void builderProductBookName(String bookName);
void builderProductBookId(int bookId);
ProductBook build();
}
建造者
package Builder;
/**
* @Auther: truedei
* @Date: 2020 /20-4-29 20:47
* @Description:建造者
*/
public class CreateProductBookBuilder implements ProductBuilder {
//属性
private String bookName;
private int bookId;
@Override
public void builderProductBookName(String bookName) {
this.bookName=bookName;
}
@Override
public void builderProductBookId(int bookId) {
this.bookId = bookId;
}
@Override
public ProductBook build() {
return new ProductBook(this.bookName,this.bookId);
}
}
构造类
package Builder;
/**
* @Auther: truedei
* @Date: 2020 /20-4-29 20:49
* @Description:
*/
public class Director {
private ProductBuilder builder;
public Director(ProductBuilder builder) {
this.builder = builder;
}
public ProductBook makeProductBook(String bookName, int bookId){
//控制建造的顺序
builder.builderProductBookId(bookId);
builder.builderProductBookName(bookName);
//定义一个对象,用于返回
ProductBook productBook = builder.build();
return productBook;
}
}
测试
package Builder;
/**
* @Auther: truedei
* @Date: 2020 /20-4-29 20:54
* @Description:
*/
public class Test {
public static void main(String[] args) {
ProductBuilder createProductBookBuilder = new CreateProductBookBuilder();
Director director = new Director(createProductBookBuilder);
ProductBook productBook = director.makeProductBook("Linux", 202001);
System.out.println(productBook);
}
}
测试结果
ProductBook{bookName=‘Linux’, bookId=202001}
应用常见
- 1、需要生成的对象具有复杂的内部结构
- 2、需要生成的对象内部属性本身相互依赖
- 3、与不可变对象配合使用
优点
- 1、建造者独立,容易扩展
- 2、便于控制细节风险
在源码中的应用
Spring的RequestMappingInfo
- mysql替换某个字段中的某个字符
- Angular企业级开发(1)-AngularJS简介
- PHP在Apache下500错误
- mysql 学习笔记
- MongoDB学习系列(2)--使用PHP访问MongoDB
- (cljs/run-at (JSVM. :browser) "命名空间就这么简单")
- Angular企业级开发(10)-Smart Table插件开发
- 安装Ubuntu时分区选择
- linux系统下安装两个或多个tomcat
- JS魔法堂:不完全国际化&本地化手册 之 实战篇
- scala + intellij idea 环境搭建及编译、打包
- Angular企业级开发(2)-搭建Angular开发环境
- JS魔法堂:不完全国际化&本地化手册 之 拓展篇
- 使用jQuery的animate方法制作滑动菜单
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法