feat: 建造者模式
This commit is contained in:
parent
e27497157c
commit
78507e12a2
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
|
@ -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)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue