![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/31dd85d296eef21c213855308bbe6649.png#pic_center)
五、设计模式之间建造器模式【Builder】
又称:生成器模式
所属类型 | 定义 |
---|---|
创建型 | 将对象的建造和表示分离。使得不同的构建组成和顺序,产生不同的表示 |
能帮我们干什么?
主要解决什么问题?
主要解决的是 复杂对象 的建造过程隔离。
优缺点
优点
- 封装良好
封装了复杂对象的建造细节。对客户端而言。只知道了提供数据,返回期望的结果。内部建造细节割裂在了建造器中。
- 建造者独立 ,便于扩展
- 便于控制细节风险
因为建造者独立,建造步骤可以细化,不会对其他模块产生影响
缺点:
使用的场景
1.相同的方法,不同的执行顺序,产生不同的时间结果时,可以采用建造者模式。
2. 多个部件或零件,都可以装配到一个对象时,但产生的结果有不相同时。可以使用建造者。
3. 产品类非常复杂,调用顺序不同产生不同效能。
菜谱: 如果一道菜的不同顺序,那么产生的结果是不一样的。
实现
角色
- 具体需要构建的产品类
- 抽象建造器。规范建造的步骤。
- 具体建造者。实现产品类的具体步骤。
- 导演类。 调用具体构造器者进行构造的过程
建造者模式
- 抽象建造者: 组成目标类的必要部分的建造的定义方法
- 具体建造者:实现各细节的建造逻辑
- 目标产品: 最终建造的产品,该产品构造比较复杂,分解成多步骤建造。
具体实现设计有很多中。只要保证角色的充当者,进行开发即可。
实现难度: ⭐️ ⭐️
代码实现
https://gitcode.net/k316378085/Java/-/tree/master/java/com/kongxiang/raindrop/dp/type/create/bulider
实现开发过程中:我们会把builder放到目标类中。
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.kongxiang.raindrop.dp.type.create.bulider;
public class Home {
private String walls;
private String door;
private String windows;
private String top;
Home(String walls, String door, String windows, String top) {
this.walls = walls;
this.door = door;
this.windows = windows;
this.top = top;
}
public static HomeBuilder builder() {
return new HomeBuilder();
}
public static class HomeBuilder {
private String walls;
private String door;
private String windows;
private String top;
HomeBuilder() {
}
public HomeBuilder walls(String walls) {
this.walls = walls;
return this;
}
public HomeBuilder door(String door) {
this.door = door;
return this;
}
public HomeBuilder windows(String windows) {
this.windows = windows;
return this;
}
public HomeBuilder top(String top) {
this.top = top;
return this;
}
public Home build() {
return new Home(this.walls, this.door, this.windows, this.top);
}
}
}
总结
建造者模式和工厂模式关注点不同。
建造者关注的是零件类型和装配顺序。
工厂方法模式关注的是 创建零件。
通常我们使用建造者模式时,和模方法模式搭配使用。将创建零件和构造的方法通过模版固定下来。建筑器实现具体的建造逻辑