模板方法(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
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
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