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