From 78507e12a29eac235d8e9190f8e0fc2c3a727b44 Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Sat, 1 Feb 2025 20:32:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BB=BA=E9=80=A0=E8=80=85=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../设计模式-v2/image-20250201203116885.png | Bin 0 -> 25693 bytes README/设计模式-v2.md | 166 ++++++++++++++++++ .../cn/bunny/pattern5/demo3/CommandDemo.java | 146 +++++++++++++++ 3 files changed, 312 insertions(+) create mode 100644 README/images/设计模式-v2/image-20250201203116885.png create mode 100644 pattern/src/main/java/cn/bunny/pattern5/demo3/CommandDemo.java diff --git a/README/images/设计模式-v2/image-20250201203116885.png b/README/images/设计模式-v2/image-20250201203116885.png new file mode 100644 index 0000000000000000000000000000000000000000..179ed3818fc2ffcff8233dd3b7b185d4de0135a0 GIT binary patch literal 25693 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 literal 0 HcmV?d00001 diff --git a/README/设计模式-v2.md b/README/设计模式-v2.md index 81f11c4..27f6720 100644 --- a/README/设计模式-v2.md +++ b/README/设计模式-v2.md @@ -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) +``` + diff --git a/pattern/src/main/java/cn/bunny/pattern5/demo3/CommandDemo.java b/pattern/src/main/java/cn/bunny/pattern5/demo3/CommandDemo.java new file mode 100644 index 0000000..dc57cdf --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern5/demo3/CommandDemo.java @@ -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(); + } + } +}