Переглянути джерело

feat(facade): add facade pattern example, demo and tests

檀烈 2 місяців тому
батько
коміт
6b978f8ca0

+ 34 - 0
src/main/java/cn/qinys/learn/behavioral/facade/Facade.java

@@ -0,0 +1,34 @@
+package cn.qinys.learn.behavioral.facade;
+
+/**
+ * 外观类:为客户端提供简化接口,组合多个子系统操作
+ */
+public class Facade {
+    private final SubsystemA a = new SubsystemA();
+    private final SubsystemB b = new SubsystemB();
+    private final SubsystemC c = new SubsystemC();
+
+    /**
+     * 执行一个复杂操作,内部调用多个子系统
+     * @return 组合各子系统返回值的描述字符串,便于测试断言
+     */
+    public String performComplexOperation() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(a.operationA1()).append(" | ");
+        sb.append(b.operationB1()).append(" | ");
+        sb.append(c.operationC1());
+        String res = sb.toString();
+        System.out.println("Facade: performComplexOperation -> " + res);
+        return res;
+    }
+
+    /**
+     * 另一个更简单的操作示例
+     */
+    public String performSimpleOperation() {
+        String res = a.operationA2();
+        System.out.println("Facade: performSimpleOperation -> " + res);
+        return res;
+    }
+}
+

+ 17 - 0
src/main/java/cn/qinys/learn/behavioral/facade/FacadeDemo.java

@@ -0,0 +1,17 @@
+package cn.qinys.learn.behavioral.facade;
+
+/**
+ * Facade 演示
+ */
+public class FacadeDemo {
+    public static void main(String[] args) {
+        Facade facade = new Facade();
+        System.out.println("Demo: Facade Pattern");
+        String complex = facade.performComplexOperation();
+        System.out.println("Result: " + complex);
+
+        String simple = facade.performSimpleOperation();
+        System.out.println("Result: " + simple);
+    }
+}
+

+ 19 - 0
src/main/java/cn/qinys/learn/behavioral/facade/SubsystemA.java

@@ -0,0 +1,19 @@
+package cn.qinys.learn.behavioral.facade;
+
+/**
+ * 子系统 A,提供某一组低级功能
+ */
+public class SubsystemA {
+    public String operationA1() {
+        String s = "SubsystemA: operationA1";
+        System.out.println(s);
+        return s;
+    }
+
+    public String operationA2() {
+        String s = "SubsystemA: operationA2";
+        System.out.println(s);
+        return s;
+    }
+}
+

+ 13 - 0
src/main/java/cn/qinys/learn/behavioral/facade/SubsystemB.java

@@ -0,0 +1,13 @@
+package cn.qinys.learn.behavioral.facade;
+
+/**
+ * 子系统 B
+ */
+public class SubsystemB {
+    public String operationB1() {
+        String s = "SubsystemB: operationB1";
+        System.out.println(s);
+        return s;
+    }
+}
+

+ 13 - 0
src/main/java/cn/qinys/learn/behavioral/facade/SubsystemC.java

@@ -0,0 +1,13 @@
+package cn.qinys.learn.behavioral.facade;
+
+/**
+ * 子系统 C
+ */
+public class SubsystemC {
+    public String operationC1() {
+        String s = "SubsystemC: operationC1";
+        System.out.println(s);
+        return s;
+    }
+}
+

+ 25 - 0
src/test/java/cn/qinys/learn/behavioral/facade/FacadeTest.java

@@ -0,0 +1,25 @@
+package cn.qinys.learn.behavioral.facade;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class FacadeTest {
+
+    @Test
+    public void testPerformComplexOperationCombinesSubsystems() {
+        Facade facade = new Facade();
+        String result = facade.performComplexOperation();
+        assertTrue(result.contains("SubsystemA: operationA1"));
+        assertTrue(result.contains("SubsystemB: operationB1"));
+        assertTrue(result.contains("SubsystemC: operationC1"));
+    }
+
+    @Test
+    public void testPerformSimpleOperationDelegatesToSubsystemA() {
+        Facade facade = new Facade();
+        String result = facade.performSimpleOperation();
+        assertEquals("SubsystemA: operationA2", result);
+    }
+}
+