From 99b9b86bfafc2d5ae8b20af3a03d2da25a18e67d Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Sun, 2 Feb 2025 22:44:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=82=E9=85=8D=E5=99=A8=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-20250202222740030.png | Bin 0 -> 13752 bytes .../设计模式-v2/image-20250202223220831.png | Bin 0 -> 14566 bytes .../设计模式-v2/image-20250202224211540.png | Bin 0 -> 20686 bytes ...v2-8efc399313ae3746932c63069aa103b0_1440w.avif | Bin 0 -> 11524 bytes README/设计模式-v2.md | 402 ++++++++++++++++++ .../main/java/cn/bunny/pattern9/Adapter1.java | 58 +++ .../main/java/cn/bunny/pattern9/Adapter2.java | 63 +++ .../main/java/cn/bunny/pattern9/Adapter3.java | 110 +++++ .../cn/bunny/pattern9/PowerAdapterImpl.java | 9 + 9 files changed, 642 insertions(+) create mode 100644 README/images/设计模式-v2/image-20250202222740030.png create mode 100644 README/images/设计模式-v2/image-20250202223220831.png create mode 100644 README/images/设计模式-v2/image-20250202224211540.png create mode 100644 README/images/设计模式-v2/v2-8efc399313ae3746932c63069aa103b0_1440w.avif create mode 100644 pattern/src/main/java/cn/bunny/pattern9/Adapter1.java create mode 100644 pattern/src/main/java/cn/bunny/pattern9/Adapter2.java create mode 100644 pattern/src/main/java/cn/bunny/pattern9/Adapter3.java create mode 100644 pattern/src/main/java/cn/bunny/pattern9/PowerAdapterImpl.java diff --git a/README/images/设计模式-v2/image-20250202222740030.png b/README/images/设计模式-v2/image-20250202222740030.png new file mode 100644 index 0000000000000000000000000000000000000000..ab187453674dc2ff96a75b1c355d17bf719cfde0 GIT binary patch literal 13752 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 literal 0 HcmV?d00001 diff --git a/README/images/设计模式-v2/image-20250202223220831.png b/README/images/设计模式-v2/image-20250202223220831.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa390ab91e6760ffcc386cc9cf3c547eb37df50 GIT binary patch literal 14566 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 bUQq2;bM2VLM!&y`UqI%aqGXl0Vc`D)UU2)p literal 0 HcmV?d00001 diff --git a/README/images/设计模式-v2/image-20250202224211540.png b/README/images/设计模式-v2/image-20250202224211540.png new file mode 100644 index 0000000000000000000000000000000000000000..ceff96abf03e73f02fe3be2a22ad6580f64daa91 GIT binary patch literal 20686 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 a-t>E*1jqf;#=C6alGY*5I-alq`u_vI_5Csc literal 0 HcmV?d00001 diff --git a/README/设计模式-v2.md b/README/设计模式-v2.md index 1e8f978..a8946e5 100644 --- a/README/设计模式-v2.md +++ b/README/设计模式-v2.md @@ -664,6 +664,85 @@ public class BakeDemo { ## 工厂模式 +### 工厂模式(Factory Pattern)介绍 + +工厂模式属于创建型设计模式,主要用于通过定义一个接口来创建对象,但让子类决定实例化哪一个类。通过这种方式,工厂模式将对象的创建与使用分离,从而解耦了客户端与具体类的依赖关系。 + +工厂模式的核心思想是:**让子类决定具体要创建哪一个产品,而不是直接在客户端代码中硬编码要使用哪个类**。 + +### 工厂模式的主要角色 + +1. **产品接口(Product)**:通常是一个接口或者抽象类,定义了具体产品的公共方法。 +2. **具体产品(ConcreteProduct)**:实现了产品接口的具体类,代表不同的产品。 +3. **工厂接口(Creator)**:通常是一个抽象类或接口,定义了一个工厂方法用于创建产品。 +4. **具体工厂(ConcreteCreator)**:实现了工厂接口的具体类,负责创建具体的产品对象。 + +### 工厂模式的类型 + +1. **简单工厂模式(Simple Factory)**:通过工厂类中的一个方法,根据传入的参数决定返回哪种具体的产品对象。 +2. **工厂方法模式(Factory Method)**:通过一个工厂接口或者抽象类来定义创建产品的工厂方法,让子类决定创建哪个具体产品。 +3. **抽象工厂模式(Abstract Factory)**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体类。 + +### 简单工厂模式示例(Java) + +```java +// 产品接口 +public interface Product { + void create(); +} + +// 具体产品A +public class ProductA implements Product { + @Override + public void create() { + System.out.println("Product A created."); + } +} + +// 具体产品B +public class ProductB implements Product { + @Override + public void create() { + System.out.println("Product B created."); + } +} + +// 工厂类 +public class ProductFactory { + // 简单工厂方法,根据输入参数创建不同的产品 + public static Product createProduct(String productType) { + if ("A".equals(productType)) { + return new ProductA(); + } else if ("B".equals(productType)) { + return new ProductB(); + } + throw new IllegalArgumentException("Unknown product type"); + } +} + +// 客户端代码 +public class Client { + public static void main(String[] args) { + Product productA = ProductFactory.createProduct("A"); + productA.create(); + + Product productB = ProductFactory.createProduct("B"); + productB.create(); + } +} +``` + +### 优点 + +1. **降低耦合度**:工厂模式将对象的创建过程与使用过程分开,客户端不需要了解具体的创建过程,从而降低了耦合度。 +2. **易于扩展**:可以通过新增具体产品类和工厂方法来扩展系统,不需要修改现有代码,符合开闭原则(OCP)。 +3. **提高代码的可维护性**:当需要修改创建产品的逻辑时,只需修改工厂类,不影响客户端代码。 + +### 缺点 + +1. **增加类的数量**:引入了工厂类、产品接口和多个具体产品类,可能导致类的数量增加,系统变得复杂。 +2. **难以理解和维护**:对于一些简单的应用程序,使用工厂模式可能会使得设计过于复杂,反而增加了理解和维护的难度。 + --- ## 单例模式 @@ -963,6 +1042,323 @@ CommandDemo.Computer(CPU=High CPU, RAM=High RAM, hardDrive=High Driver) --- +## 适配器模式 + +需要角色:抽象适配者角色(Abstract Adapter)、适配者角色(Adapter)、目标角色(Target) + +在生活中,有时需要将380V三相电转成220V,这时候需要变压器,当然也有三相电转两相电接法,我们可以使用代码模拟这个操作 。 + +![](./images/设计模式-v2/v2-8efc399313ae3746932c63069aa103b0_1440w-1738507407103-4.avif) + +### 类适配器 + +![image-20250202222740030](./images/设计模式-v2/image-20250202222740030.png) + +#### 示例代码 + +```java +public class Adapter1 { + public static void main(String[] args) { + PowerAdapter powerAdapter = new PowerAdapter(); + Integer integer = powerAdapter.output220V(); + + System.out.println("----------------"); + + PowerAdapter powerAdapter1 = new PowerAdapter(); + powerAdapter1.output220V(); + Integer i = powerAdapter1.output380V(); + } + + // 电压输出 + interface PowerTarget { + /** + * 输出电压220V + * + * @return 输出电压 + */ + Integer output220V(); + } + + static class PowerAdapter extends Power implements PowerTarget { + + /** + * 输出电压220V + * + * @return 输出电压 + */ + @Override + public Integer output220V() { + Integer output = super.getOutput(); + System.out.println("变压器交流" + output + "v转220v三相电变两项电。。。"); + + double adapter = new Random().nextDouble(1.64, 1.72); + Integer newOutput = (int) (output / adapter); + System.out.println("变压器转换完成:电压输出为:" + newOutput); + + return newOutput; + } + } + + @Data + static class Power { + private Integer output = 380; + + public Integer output380V() { + System.out.println("输出电压:" + output); + return output; + } + } +} +``` + +#### 运行结果: + +```java +变压器交流380v转220v三相电变两项电。。。 +变压器转换完成:电压输出为:224 +---------------- +变压器交流380v转220v三相电变两项电。。。 +变压器转换完成:电压输出为:224 +输出电压:380 +``` + +### 对象适配器 + +![image-20250202223220831](./images/设计模式-v2/image-20250202223220831.png) + +#### 示例代码 + +```java +public class Adapter2 { + public static void main(String[] args) { + Power power = new Power(); + PowerAdapter powerAdapter = new PowerAdapter(power); + Integer integer = powerAdapter.output220V(); + } + + // 电压输出 + interface PowerTarget { + /** + * 输出电压220V + * + * @return 输出电压 + */ + Integer output220V(); + } + + @Setter + @Getter + static class PowerAdapter implements PowerTarget { + private final Power power; + + public PowerAdapter(Power power) { + this.power = power; + } + + /** + * 输出电压220V + * + * @return 输出电压 + */ + @Override + public Integer output220V() { + Integer output = power.getOutput(); + System.out.println("变压器交流" + output + "v转220v三相电变两项电。。。"); + + double adapter = new Random().nextDouble(1.64, 1.72); + Integer newOutput = (int) (output / adapter); + System.out.println("变压器转换完成:电压输出为:" + newOutput); + + return newOutput; + } + + } + + @Data + static class Power { + private Integer output = 380; + + public Integer output380V() { + System.out.println("输出电压:" + output); + return output; + } + } +} +``` + +#### 运行结果 : + +```java +变压器交流380v转220v三相电变两项电。。。 +变压器转换完成:电压输出为:224 +``` + +### 缺省适配器 + +![image-20250202224211540](./images/设计模式-v2/image-20250202224211540.png) + +#### 示例代码 + +```java +public class Adapter3 { + public static void main(String[] args) { + Power power = new Power(); + PowerAdapter powerAdapter = new Power220VAdapter(power); + Integer integer = powerAdapter.output220V(); + } + + // 电压输出 + interface PowerTarget { + /** + * 输出电压24V + * + * @return 输出电压 + */ + Integer output24V(); + + /** + * 输出电压110V + * + * @return 输出电压 + */ + Integer output110V(); + + /** + * 输出电压220V + * + * @return 输出电压 + */ + Integer output220V(); + } + + @Data + static abstract class PowerAdapter implements PowerTarget { + protected Power power; + + public PowerAdapter(Power power) { + this.power = power; + } + + /** + * 输出电压24V + * + * @return 输出电压 + */ + @Override + public Integer output24V() { + return 0; + } + + /** + * 输出电压110V + * + * @return 输出电压 + */ + @Override + public Integer output110V() { + return 0; + } + + /** + * 输出电压220V + * + * @return 输出电压 + */ + @Override + public Integer output220V() { + return 0; + } + } + + // 缺省适配器转换器 + static class Power220VAdapter extends PowerAdapter { + public Power220VAdapter(Power power) { + super(power); + } + + /** + * 输出电压220V + * + * @return 输出电压 + */ + @Override + public Integer output220V() { + Integer output = power.getOutput(); + System.out.println("变压器开始转换:" + output + "v转220v三相电变两项电。。。"); + + double adapter = new Random().nextDouble(1.64, 1.72); + Integer newOutput = (int) (output / adapter); + System.out.println("变压器转换完成:电压输出为:" + newOutput); + + return newOutput; + } + } + + @Data + static class Power { + private Integer output = 380; + + public Integer output380V() { + System.out.println("输出电压:" + output); + return output; + } + } +} +``` + +#### 运行结果: + +```java +变压器开始转换:380v转220v三相电变两项电。。。 +变压器转换完成:电压输出为:224 +``` + +--- + +## 外观模式 + +--- + +## 组合模式 + +--- + +## 状态模式 + +--- + +## 模板方法模式 + +--- + +## 备忘录模式 + +--- + +## 中介者模式 + +--- + +## 迭代器模式 + +--- + +## 访问者模式 + +--- + +## 解释器模式 + +--- + +## 享元模式 + +--- + +## 代理模式 + +--- + ## 原型模式 ![image-20250202214232289](./images/设计模式-v2/image-20250202214232289.png) @@ -1156,6 +1552,12 @@ false false ``` +--- + +## 桥接模式 + + + --- ## 责任链模式-未完成。。。 diff --git a/pattern/src/main/java/cn/bunny/pattern9/Adapter1.java b/pattern/src/main/java/cn/bunny/pattern9/Adapter1.java new file mode 100644 index 0000000..82cd414 --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern9/Adapter1.java @@ -0,0 +1,58 @@ +package cn.bunny.pattern9; + +import lombok.Data; + +import java.util.Random; + +public class Adapter1 { + public static void main(String[] args) { + PowerAdapter powerAdapter = new PowerAdapter(); + Integer integer = powerAdapter.output220V(); + + System.out.println("----------------"); + + PowerAdapter powerAdapter1 = new PowerAdapter(); + powerAdapter1.output220V(); + Integer i = powerAdapter1.output380V(); + } + + // 电压输出 + interface PowerTarget { + /** + * 输出电压220V + * + * @return 输出电压 + */ + Integer output220V(); + } + + static class PowerAdapter extends Power implements PowerTarget { + + /** + * 输出电压220V + * + * @return 输出电压 + */ + @Override + public Integer output220V() { + Integer output = super.getOutput(); + System.out.println("变压器交流" + output + "v转220v三相电变两项电。。。"); + + double adapter = new Random().nextDouble(1.64, 1.72); + Integer newOutput = (int) (output / adapter); + System.out.println("变压器转换完成:电压输出为:" + newOutput); + + return newOutput; + } + } + + @Data + static class Power { + private Integer output = 380; + + public Integer output380V() { + System.out.println("输出电压:" + output); + return output; + } + } +} diff --git a/pattern/src/main/java/cn/bunny/pattern9/Adapter2.java b/pattern/src/main/java/cn/bunny/pattern9/Adapter2.java new file mode 100644 index 0000000..87d1670 --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern9/Adapter2.java @@ -0,0 +1,63 @@ +package cn.bunny.pattern9; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +import java.util.Random; + +public class Adapter2 { + public static void main(String[] args) { + Power power = new Power(); + PowerAdapter powerAdapter = new PowerAdapter(power); + Integer integer = powerAdapter.output220V(); + } + + // 电压输出 + interface PowerTarget { + /** + * 输出电压220V + * + * @return 输出电压 + */ + Integer output220V(); + } + + @Setter + @Getter + static class PowerAdapter implements PowerTarget { + private final Power power; + + public PowerAdapter(Power power) { + this.power = power; + } + + /** + * 输出电压220V + * + * @return 输出电压 + */ + @Override + public Integer output220V() { + Integer output = power.getOutput(); + System.out.println("变压器交流" + output + "v转220v三相电变两项电。。。"); + + double adapter = new Random().nextDouble(1.64, 1.72); + Integer newOutput = (int) (output / adapter); + System.out.println("变压器转换完成:电压输出为:" + newOutput); + + return newOutput; + } + + } + + @Data + static class Power { + private Integer output = 380; + + public Integer output380V() { + System.out.println("输出电压:" + output); + return output; + } + } +} diff --git a/pattern/src/main/java/cn/bunny/pattern9/Adapter3.java b/pattern/src/main/java/cn/bunny/pattern9/Adapter3.java new file mode 100644 index 0000000..1aa150c --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern9/Adapter3.java @@ -0,0 +1,110 @@ +package cn.bunny.pattern9; + +import lombok.Data; + +import java.util.Random; + +public class Adapter3 { + public static void main(String[] args) { + Power power = new Power(); + PowerAdapter powerAdapter = new Power220VAdapter(power); + Integer integer = powerAdapter.output220V(); + } + + // 电压输出 + interface PowerTarget { + /** + * 输出电压24V + * + * @return 输出电压 + */ + Integer output24V(); + + /** + * 输出电压110V + * + * @return 输出电压 + */ + Integer output110V(); + + /** + * 输出电压220V + * + * @return 输出电压 + */ + Integer output220V(); + } + + @Data + static abstract class PowerAdapter implements PowerTarget { + protected Power power; + + public PowerAdapter(Power power) { + this.power = power; + } + + /** + * 输出电压24V + * + * @return 输出电压 + */ + @Override + public Integer output24V() { + return 0; + } + + /** + * 输出电压110V + * + * @return 输出电压 + */ + @Override + public Integer output110V() { + return 0; + } + + /** + * 输出电压220V + * + * @return 输出电压 + */ + @Override + public Integer output220V() { + return 0; + } + } + + // 缺省适配器转换器 + static class Power220VAdapter extends PowerAdapter { + public Power220VAdapter(Power power) { + super(power); + } + + /** + * 输出电压220V + * + * @return 输出电压 + */ + @Override + public Integer output220V() { + Integer output = power.getOutput(); + System.out.println("变压器开始转换:" + output + "v转220v三相电变两项电。。。"); + + double adapter = new Random().nextDouble(1.64, 1.72); + Integer newOutput = (int) (output / adapter); + System.out.println("变压器转换完成:电压输出为:" + newOutput); + + return newOutput; + } + } + + @Data + static class Power { + private Integer output = 380; + + public Integer output380V() { + System.out.println("输出电压:" + output); + return output; + } + } +} diff --git a/pattern/src/main/java/cn/bunny/pattern9/PowerAdapterImpl.java b/pattern/src/main/java/cn/bunny/pattern9/PowerAdapterImpl.java new file mode 100644 index 0000000..11f56a6 --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern9/PowerAdapterImpl.java @@ -0,0 +1,9 @@ +package cn.bunny.pattern9; + +public class PowerAdapterImpl extends Adapter3.PowerAdapter { + public PowerAdapterImpl(Adapter3.Power power) { + super(power); + } + + +}