写点什么

设计模式之建造者模式

作者:乌龟哥哥
  • 2022 年 5 月 12 日
  • 本文字数:980 字

    阅读完需:约 3 分钟

设计模式之建造者模式

使用场景

  • 对象的构建有很多必填参数,如果使用构造函数会导致参数列表过长难以使用

  • 构造参数之间有依赖关系,比如设置了 minAge 就必须设置 maxAge,且 minAge 小于等于 maxAge

  • 类的属性一旦被创建就不可变(不暴力 set()方法)

类图

Person 类包含了一个内部类 Builder,负责对外暴露设置属性的方法,这些方法可以包含校验和初始化规则,属性之前的依赖规则可以放到最终调用的 build()方法中校验

代码实现

public class Person {
private Long id; private String name; private Integer minAge; private Integer maxAge;
private Person() { }
public static class Builder {
private Person person = new Person();
public Builder id(Long id) { person.id = id; return this; }
public Builder name(String name) { person.name = name; return this; }
public Builder minAge(Integer minAge) { person.minAge = minAge; return this; }
public Builder maxAge(Integer maxAge) { person.maxAge = maxAge; return this; }
public Person build() { if (person.minAge != null && person.maxAge != null) { if (person.minAge < 0) { throw new IllegalArgumentException("minAge必须大于等于0"); } if (person.maxAge <= person.minAge) { throw new IllegalArgumentException("maxAge必须大于等于minAge"); } } else if ((person.minAge == null && person.maxAge != null) || (person.minAge != null && person.maxAge == null)) { throw new IllegalArgumentException("minAge和maxAge必须同时设置"); } return person; }
}
}
复制代码

与工厂模式有何区别?

  • 工厂模式是用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。

  • 建造者模式是用来创建一种类型的复杂对象,通过设置不同的可选参数,“定制化”地创建不同的对象。

发布于: 刚刚阅读数: 2
用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021.03.16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
设计模式之建造者模式_5 月月更_乌龟哥哥_InfoQ写作社区