设计模式之建造者模式
定义
把对象的创建放在单独的 Builder 类中,负责参数的校验、对象的创建等工作
对象相对比较复杂,通过不同的参数,定制化地创建出不同的对象
代码实现
1public class Customer {
2 private String name;
3 private int age;
4 private String address;
5 private String occuapation;
6
7 private Customer(Builder builder) {
8 this.name = builder.name;
9 this.age = builder.age;
10 this.address = builder.address;
11 this.occuapation = builder.occuapation;
12 }
13 //...省略getter方法...
14
15 //我们将Builder类设计成了Customer的内部类。
16 public static class Builder {
17
18 private static Integer MIN_AGE = 0;
19 private static Integer MAX_AGE = 150;
20
21 private String name;
22 private int age;
23 private String address;
24 private String occuapation;
25
26
27 public Customer build() {
28 if (StringUtils.isBlank(name)) {
29 throw new IllegalArgumentException("...");
30 }
31 if (age < MIN_AGE || age > MAX_AGE) {
32 throw new IllegalArgumentException("...");
33 }
34
35 return new Customer(this);
36 }
37
38 public Builder setName(String name) {
39 this.name = name;
40 return this;
41 }
42
43 //省略其它set函数...
44 }
45}
46
47// 使用建造者模式来创建 Customer 对象
48Customer customer = new Customer.Builder()
49 .setName("张三")
50 .setAge(16)
51 .setAddress("四川省成都市")
52 .setOccupation("产品经理")
53 .build();复制
建造者模式和工厂模式的区别:
工厂模式:
用来创建不同但是相关类型的对象,由给定的类型来决定创建那种类型的对象
例子:顾客在参观点餐,利用工厂模式,根据用户不同的选择,来制作不同的食物,比如披萨、汉堡、沙拉
建造者模式:
创建一种相对复杂的对象,通过不同的参数,定制化地创建不同的对象
例子:对于披萨来说,用户又有各种配料可以定制,比如奶酪、西红柿、芝士,我们通过建造者模式根据用户选择的不同配料来制作披萨
应用场景
如果一个类中有很多属性,为了避免构造函数的参数列表过长,影响代码的可读性和易用,此时就可以用建造者模式来创建对象
1. 如果把类的必填属性放到构造函数中,而必填属性比较多,那么构造函数的参数就会变得很多。如果使用 set() 方法来设置必填参数,那么必填参数校验的逻辑就无处安放了
2. 如果类的属性之间有依赖关系或者约束条件,那么校验这些依赖关系或约束条件的逻辑就无处安放了
3. 如果要创建不可变对象,要对象创建好之后,不能做修改,那么 set() 方法就无法暴露出来。构造函数配合 set() 方法来设置属性值的方式就不适用了
文章转载自PiPiD,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
1251次阅读
2025-04-27 16:53:22
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
729次阅读
2025-04-30 15:24:06
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
595次阅读
2025-04-14 09:40:20
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
509次阅读
2025-04-17 17:02:24
一页概览:Oracle GoldenGate
甲骨文云技术
477次阅读
2025-04-30 12:17:56
GoldenDB数据库v7.2焕新发布,助力全行业数据库平滑替代
GoldenDB分布式数据库
471次阅读
2025-04-30 12:17:50
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
361次阅读
2025-04-18 10:01:22
给准备学习国产数据库的朋友几点建议
白鳝的洞穴
291次阅读
2025-05-07 10:06:14
XCOPS广州站:从开源自研之争到AI驱动的下一代数据库架构探索
韩锋频道
278次阅读
2025-04-29 10:35:54
国产数据库图谱又上新|82篇精选内容全览达梦数据库
墨天轮编辑部
275次阅读
2025-04-23 12:04:21