feat: 模板方法模式

This commit is contained in:
Bunny 2025-02-03 16:36:49 +08:00
parent 3ede036009
commit 4782334a63
3 changed files with 137 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1612,6 +1612,8 @@ public class BakeDemo {
将定义好的按步骤执行的内容进行封装,模板方法是比较单间的设计模式,是代码复用的基本技术,在类库中尤其重要,遵循:“抽象类应当拥有尽可能多的可能性,应当拥有尽可能少的数据”。 将定义好的按步骤执行的内容进行封装,模板方法是比较单间的设计模式,是代码复用的基本技术,在类库中尤其重要,遵循:“抽象类应当拥有尽可能多的可能性,应当拥有尽可能少的数据”。
![image-20250203163253869](./images/设计模式-v2/image-20250203163253869.png)
需要的角色抽象类Abstract Class、具体类Concrete Class 需要的角色抽象类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 ```java
验证用户身份。。。
检查完成我的余额还有1999亿元
执行支付。。。
支付成功我的余额还有1994亿元
``` ```
--- ---

View File

@ -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亿元");
}
}
}