模板方法(Template Pattern)
半塘 2024/3/28 Java进阶
定义一系列操作的算法框架,并将部分步骤实现延迟到子类。
# 1、模板方法案例
以用户打车为例,选择打车平台不同(延迟子类),定位方式相同,叫车并乘车,付款方式不同(延迟到子类)
public abstract class CallCar {
// 打开软件
abstract public void openSoftware();
// 定位
public void location(String startPosition,String endPosition){
System.out.println("路线:"+startPosition+"===>"+endPosition);
}
// 叫车并乘车
public void callAndRide(){
System.out.println("打车并乘坐到中终点");
}
// 付款
abstract public void payMonth();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class UserA extends CallCar{
@Override
public void openSoftware() {
System.out.println("打开滴滴打车");
}
@Override
public void payMonth() {
System.out.println("微信付款");
}
}
public class UserB extends CallCar{
@Override
public void openSoftware() {
System.out.println("打开曹操出行");
}
@Override
public void payMonth() {
System.out.println("支付宝付款");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ClientTest {
public static void main(String[] args) {
System.out.println("用户A");
UserA userA = new UserA();
userA.openSoftware();
userA.location("北京路","南京路");
userA.callAndRide();
userA.payMonth();
System.out.println("======================");
System.out.println("用户B");
UserB userB = new UserB();
userB.openSoftware();
userB.location("南京路","北京路");
userB.callAndRide();
userB.payMonth();
}
}
/**
用户A
打开滴滴打车
路线:北京路===>南京路
打车并乘坐到中终点
微信付款
======================
用户B
打开曹操出行
路线:南京路===>北京路
打车并乘坐到中终点
支付宝付款
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31