diff --git a/README/images/设计模式-v2/image-20250203163253869.png b/README/images/设计模式-v2/image-20250203163253869.png new file mode 100644 index 0000000..ec9314e Binary files /dev/null and b/README/images/设计模式-v2/image-20250203163253869.png differ diff --git a/README/设计模式-v2.md b/README/设计模式-v2.md index 6fee5fd..0455b82 100644 --- a/README/设计模式-v2.md +++ b/README/设计模式-v2.md @@ -1612,6 +1612,8 @@ public class BakeDemo { 将定义好的按步骤执行的内容进行封装,模板方法是比较单间的设计模式,是代码复用的基本技术,在类库中尤其重要,遵循:“抽象类应当拥有尽可能多的可能性,应当拥有尽可能少的数据”。 +![image-20250203163253869](./images/设计模式-v2/image-20250203163253869.png) + 需要的角色:抽象类(Abstract Class)、具体类(Concrete Class)。 比如做一些比较固定的事情(支付流程处理),但是其中几项内容可能会发生改变。 @@ -1620,10 +1622,79 @@ public class BakeDemo { #### 示例代码 +```java +public class PaymentProcess { + public static void main(String[] args) { + ConcretePaymentProcess concretePaymentProcess = new ConcretePaymentProcess(); + concretePaymentProcess.startProcess(); + } + + // 抽象模板方法 + static abstract class AbstractPaymentProcess { + + /** + * 开始流程 + */ + public void startProcess() { + authenticationUser(); + checkBalance(); + executePayment(); + returnPayment(); + } + + /** + * 验证用户身份 + */ + private void authenticationUser() { + System.out.println("验证用户身份。。。"); + } + + /** + * 检查余额 + */ + public abstract void checkBalance(); + + /** + * 执行支付 + */ + private void executePayment() { + System.out.println("执行支付。。。"); + } + + /** + * 返回支付结果 + */ + public abstract void returnPayment(); + } + + static class ConcretePaymentProcess extends AbstractPaymentProcess { + + /** + * 检查余额 + */ + @Override + public void checkBalance() { + System.out.println("检查完成,我的余额还有:1999亿元"); + } + + /** + * 返回支付结果 + */ + @Override + public void returnPayment() { + System.out.println("支付成功,我的余额还有:1994亿元"); + } + } +} +``` + #### 运行结果: ```java - +验证用户身份。。。 +检查完成,我的余额还有:1999亿元 +执行支付。。。 +支付成功,我的余额还有:1994亿元 ``` --- diff --git a/pattern/src/main/java/cn/bunny/pattern11/PaymentProcess.java b/pattern/src/main/java/cn/bunny/pattern11/PaymentProcess.java new file mode 100644 index 0000000..6e9c5d8 --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern11/PaymentProcess.java @@ -0,0 +1,65 @@ +package cn.bunny.pattern11; + +public class PaymentProcess { + public static void main(String[] args) { + ConcretePaymentProcess concretePaymentProcess = new ConcretePaymentProcess(); + concretePaymentProcess.startProcess(); + } + + // 抽象模板方法 + static abstract class AbstractPaymentProcess { + + /** + * 开始流程 + */ + public void startProcess() { + authenticationUser(); + checkBalance(); + executePayment(); + returnPayment(); + } + + /** + * 验证用户身份 + */ + private void authenticationUser() { + System.out.println("验证用户身份。。。"); + } + + /** + * 检查余额 + */ + public abstract void checkBalance(); + + /** + * 执行支付 + */ + private void executePayment() { + System.out.println("执行支付。。。"); + } + + /** + * 返回支付结果 + */ + public abstract void returnPayment(); + } + + static class ConcretePaymentProcess extends AbstractPaymentProcess { + + /** + * 检查余额 + */ + @Override + public void checkBalance() { + System.out.println("检查完成,我的余额还有:1999亿元"); + } + + /** + * 返回支付结果 + */ + @Override + public void returnPayment() { + System.out.println("支付成功,我的余额还有:1994亿元"); + } + } +}