建造者模式
1.概述
建造者模式(Builder Pattern)
, 使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
介绍
意图:将一个复杂的构建与其分离,使得同样的构建过程可以创建不同的表示。
主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"
的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却相当稳定。
何时使用: 一些基本部件不会变,而其组合经常变化的时候。
如何解决: 将变与不变分离开。
关键代码: 建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。
核心组成
- Builder:抽象建造者,定义多个通用方法和构建方法
- ConcreteBuilder:具体建造者,可以有多个
- Director:指挥者,控制整个组合过程,将需求交给建造者,由建造者去创建对象
- Product:产品角色
通过图再来理解下
2.代码实现
产品角色Product
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Computer {
/*
* 这里为了方便,都使用String类型,实际上应该大部分是自定义类型
* */
private String cpu;
private String memory;
private String mainboard;
}
抽象建造者
public interface Builder {
void buildCpu();
void buildMemory();
void buildMainBoard();
Computer createComputer();
}
具体建造者
这里为了方便,只写一个实现类。
public class HighComputerBuilder implements Builder {
private Computer computer = new Computer();
@Override
public void buildCpu() {
computer.setCpu("高配 Cpu");
}
@Override
public void buildMemory() {
computer.setMemory("高配 内存");
}
@Override
public void buildMainBoard() {
computer.setMainboard("高配 主板");
}
@Override
public Computer createComputer() {
return computer;
}
}
指挥者,控制产品生产的过程
public class Director {
public Computer build(Builder builder){
builder.buildCpu();
builder.buildMainBoard();
builder.buildMemory();
return builder.createComputer();
}
}
测试
public class Main {
public static void main(String[] args) {
Director director = new Director();
Computer computer = director.build(new HighComputerBuilder());
System.out.println(computer);
}
}
/*
Computer(cpu=高配 Cpu, memory=高配 内存, mainboard=高配 主板)
*/