Forráskód Böngészése

Add factory pattern implementation including FruitFactory, tests, and fixes

檀烈 6 órája
szülő
commit
b8e3117c38

+ 11 - 0
src/main/java/cn/qinys/learn/creational/factory/Apple.java

@@ -0,0 +1,11 @@
+package cn.qinys.learn.creational.factory;
+
+/**
+ * 具体产品B
+ */
+public class Apple implements Fruit {
+    @Override
+    public String name() {
+        return "apple";
+    }
+}

+ 11 - 0
src/main/java/cn/qinys/learn/creational/factory/Banana.java

@@ -0,0 +1,11 @@
+package cn.qinys.learn.creational.factory;
+
+/**
+ * 具体产品A
+ */
+public class Banana implements Fruit {
+    @Override
+    public String name() {
+        return "banana";
+    }
+}

+ 9 - 0
src/main/java/cn/qinys/learn/creational/factory/Fruit.java

@@ -0,0 +1,9 @@
+package cn.qinys.learn.creational.factory;
+
+/**
+ * 产品接口
+ */
+public interface Fruit {
+
+    String name();
+}

+ 15 - 0
src/main/java/cn/qinys/learn/creational/factory/FruitFactory.java

@@ -0,0 +1,15 @@
+package cn.qinys.learn.creational.factory;
+
+/**
+ * 具体工厂A
+ */
+public class FruitFactory {
+
+    public static Fruit createFruit(Class<? extends Fruit> c) {
+        try {
+            return c.getDeclaredConstructor().newInstance();
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to create fruit instance", e);
+        }
+    }
+}

+ 9 - 0
src/test/java/cn/qinys/learn/creational/factory/FactoryTest.java

@@ -0,0 +1,9 @@
+package cn.qinys.learn.creational.factory;
+
+/**
+ * 工厂模式单元测试
+ */
+public class FactoryTest {
+
+
+}

+ 21 - 0
src/test/java/cn/qinys/learn/creational/factory/FruitFactoryTest.java

@@ -0,0 +1,21 @@
+package cn.qinys.learn.creational.factory;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class FruitFactoryTest {
+
+    @Test
+    void createFruit() {
+        Fruit apple = FruitFactory.createFruit(Apple.class);
+        assertEquals("apple", apple.name());
+
+        Fruit banana = FruitFactory.createFruit(Banana.class);
+        assertEquals("banana", banana.name());
+
+//        assertThrows(IllegalArgumentException.class, () -> {
+//            FruitFactory.createFruit("orange");
+//        });
+    }
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
设计模式之禅(第2版)(jb51.net).pdf


Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott