feat: 模板方法模式
This commit is contained in:
parent
3ede036009
commit
4782334a63
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
|
@ -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亿元
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
@ -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亿元");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue