feat: 建造者模式

This commit is contained in:
Bunny 2025-02-01 20:32:09 +08:00
parent e27497157c
commit 78507e12a2
3 changed files with 312 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -619,3 +619,169 @@ public class Main {
} }
} }
``` ```
## 建造者模式
![image-20250201203116885](./images/设计模式-v2/image-20250201203116885.png)
### 简单示例
比如我们要构建一个复杂的 `Computer`(计算机)对象。我们可以定义一个 `ComputerBuilder`,它将按顺序设置计算机的 CPU、内存、硬盘等组件最后得到一个完整的 `Computer` 对象。
#### 代码示例
```java
public class CommandDemo {
public static void main(String[] args) {
ConcreteLowComputerBuilder concreteLowComputerBuilder = new ConcreteLowComputerBuilder();
Director director = new Director(concreteLowComputerBuilder);
director.constructComputer();
System.out.println(concreteLowComputerBuilder.getComputer());
System.out.println("\n-----------------分割线-----------------\n");
ConcreteHighComputerBuilder concreteHighComputerBuilder = new ConcreteHighComputerBuilder();
director = new Director(concreteHighComputerBuilder);
director.constructComputer();
System.out.println(concreteHighComputerBuilder.getComputer());
}
// 构建产品接口
interface ComputerBuilder {
/**
* 构建 CPU 方法
*/
void buildCPU();
/**
* 构建 RAM 方法
*/
void buildRAM();
/**
* 构建 磁盘 方法
*/
void buildHardDrive();
/**
* 返回产品
*
* @return Computer
*/
Computer getComputer();
}
// 产品类
@Data
static class Computer {
private String CPU;
private String RAM;
private String hardDrive;
}
// 构建低端产品
static class ConcreteLowComputerBuilder implements ComputerBuilder {
private final Computer computer = new Computer();
/**
* 构建 CPU 方法
*/
@Override
public void buildCPU() {
computer.setCPU("Low CPU");
}
/**
* 构建 RAM 方法
*/
@Override
public void buildRAM() {
computer.setRAM("Low RAM");
}
/**
* 构建 磁盘 方法
*/
@Override
public void buildHardDrive() {
computer.setHardDrive("Low Driver");
}
/**
* 返回产品
*
* @return Computer
*/
@Override
public Computer getComputer() {
return computer;
}
}
// 构建高端产品
static class ConcreteHighComputerBuilder implements ComputerBuilder {
private final Computer computer = new Computer();
/**
* 构建 CPU 方法
*/
@Override
public void buildCPU() {
computer.setCPU("High CPU");
}
/**
* 构建 RAM 方法
*/
@Override
public void buildRAM() {
computer.setRAM("High RAM");
}
/**
* 构建 磁盘 方法
*/
@Override
public void buildHardDrive() {
computer.setHardDrive("High Driver");
}
/**
* 返回产品
*
* @return Computer
*/
@Override
public Computer getComputer() {
return computer;
}
}
// 构建者
public static class Director {
private final ComputerBuilder builder;
public Director(ComputerBuilder builder) {
this.builder = builder;
}
public void constructComputer() {
builder.buildCPU();
builder.buildRAM();
builder.buildHardDrive();
}
}
}
```
#### 运行结果
```java
CommandDemo.Computer(CPU=Low CPU, RAM=Low RAM, hardDrive=Low Driver)
-----------------分割线-----------------
CommandDemo.Computer(CPU=High CPU, RAM=High RAM, hardDrive=High Driver)
```

View File

@ -0,0 +1,146 @@
package cn.bunny.pattern5.demo3;
import lombok.Data;
public class CommandDemo {
public static void main(String[] args) {
ConcreteLowComputerBuilder concreteLowComputerBuilder = new ConcreteLowComputerBuilder();
Director director = new Director(concreteLowComputerBuilder);
director.constructComputer();
System.out.println(concreteLowComputerBuilder.getComputer());
System.out.println("\n-----------------分割线-----------------\n");
ConcreteHighComputerBuilder concreteHighComputerBuilder = new ConcreteHighComputerBuilder();
director = new Director(concreteHighComputerBuilder);
director.constructComputer();
System.out.println(concreteHighComputerBuilder.getComputer());
}
// 构建产品接口
interface ComputerBuilder {
/**
* 构建 CPU 方法
*/
void buildCPU();
/**
* 构建 RAM 方法
*/
void buildRAM();
/**
* 构建 磁盘 方法
*/
void buildHardDrive();
/**
* 返回产品
*
* @return Computer
*/
Computer getComputer();
}
// 产品类
@Data
static class Computer {
private String CPU;
private String RAM;
private String hardDrive;
}
// 构建低端产品
static class ConcreteLowComputerBuilder implements ComputerBuilder {
private final Computer computer = new Computer();
/**
* 构建 CPU 方法
*/
@Override
public void buildCPU() {
computer.setCPU("Low CPU");
}
/**
* 构建 RAM 方法
*/
@Override
public void buildRAM() {
computer.setRAM("Low RAM");
}
/**
* 构建 磁盘 方法
*/
@Override
public void buildHardDrive() {
computer.setHardDrive("Low Driver");
}
/**
* 返回产品
*
* @return Computer
*/
@Override
public Computer getComputer() {
return computer;
}
}
// 构建高端产品
static class ConcreteHighComputerBuilder implements ComputerBuilder {
private final Computer computer = new Computer();
/**
* 构建 CPU 方法
*/
@Override
public void buildCPU() {
computer.setCPU("High CPU");
}
/**
* 构建 RAM 方法
*/
@Override
public void buildRAM() {
computer.setRAM("High RAM");
}
/**
* 构建 磁盘 方法
*/
@Override
public void buildHardDrive() {
computer.setHardDrive("High Driver");
}
/**
* 返回产品
*
* @return Computer
*/
@Override
public Computer getComputer() {
return computer;
}
}
// 构建者
public static class Director {
private final ComputerBuilder builder;
public Director(ComputerBuilder builder) {
this.builder = builder;
}
public void constructComputer() {
builder.buildCPU();
builder.buildRAM();
builder.buildHardDrive();
}
}
}