From 8539647d0a0d8243775ae25f8fc7369ba57a07f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=86=AC=E9=9B=AA?= Date: Sun, 26 Oct 2025 16:19:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=89=80=E6=9C=89=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ConcreteProductA.java | 12 ++++++++++++ src/main/java/ConcreteProductB.java | 12 ++++++++++++ src/main/java/Factory.java | 24 ++++++++++++++++++++++++ src/main/java/FactoryTest.java | 26 ++++++++++++++++++++++++++ src/main/java/Product.java | 12 ++++++++++++ 5 files changed, 86 insertions(+) create mode 100644 src/main/java/ConcreteProductA.java create mode 100644 src/main/java/ConcreteProductB.java create mode 100644 src/main/java/Factory.java create mode 100644 src/main/java/FactoryTest.java create mode 100644 src/main/java/Product.java diff --git a/src/main/java/ConcreteProductA.java b/src/main/java/ConcreteProductA.java new file mode 100644 index 0000000..a11ae01 --- /dev/null +++ b/src/main/java/ConcreteProductA.java @@ -0,0 +1,12 @@ +package src.main.java; + +/** + * 具体产品A + * 实现产品接口的具体类 + */ +public class ConcreteProductA implements Product { + @Override + public void operation() { + System.out.println("ConcreteProductA performing operation"); + } +} \ No newline at end of file diff --git a/src/main/java/ConcreteProductB.java b/src/main/java/ConcreteProductB.java new file mode 100644 index 0000000..2e040a4 --- /dev/null +++ b/src/main/java/ConcreteProductB.java @@ -0,0 +1,12 @@ +package src.main.java; + +/** + * 具体产品B + * 实现产品接口的具体类 + */ +public class ConcreteProductB implements Product { + @Override + public void operation() { + System.out.println("ConcreteProductB performing operation"); + } +} \ No newline at end of file diff --git a/src/main/java/Factory.java b/src/main/java/Factory.java new file mode 100644 index 0000000..1c5ffa3 --- /dev/null +++ b/src/main/java/Factory.java @@ -0,0 +1,24 @@ +package src.main.java; + +/** + * 工厂类 + * 根据参数创建不同的具体产品实例 + */ +public class Factory { + /** + * 创建产品的静态方法 + * @param type 产品类型 + * @return 产品实例 + */ + public static Product createProduct(String type) { + if (type == null) { + return null; + } + if (type.equalsIgnoreCase("A")) { + return new ConcreteProductA(); + } else if (type.equalsIgnoreCase("B")) { + return new ConcreteProductB(); + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/FactoryTest.java b/src/main/java/FactoryTest.java new file mode 100644 index 0000000..4c53dec --- /dev/null +++ b/src/main/java/FactoryTest.java @@ -0,0 +1,26 @@ +package src.main.java; + +/** + * 测试类 + * 验证简单工厂模式的实现 + */ +public class FactoryTest { + public static void main(String[] args) { + // 测试创建ConcreteProductA + Product productA = Factory.createProduct("A"); + System.out.println("Testing Product A:"); + productA.operation(); + + // 测试创建ConcreteProductB + Product productB = Factory.createProduct("B"); + System.out.println("\nTesting Product B:"); + productB.operation(); + + // 测试无效类型 + Product invalidProduct = Factory.createProduct("C"); + System.out.println("\nTesting Invalid Product:"); + if (invalidProduct == null) { + System.out.println("Invalid product type, returned null"); + } + } +} \ No newline at end of file diff --git a/src/main/java/Product.java b/src/main/java/Product.java new file mode 100644 index 0000000..b2c7e41 --- /dev/null +++ b/src/main/java/Product.java @@ -0,0 +1,12 @@ +package src.main.java; + +/** + * 产品接口 + * 定义所有产品共有的操作 + */ +public interface Product { + /** + * 产品的操作方法 + */ + void operation(); +} \ No newline at end of file