Java: Template Method Pattern

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 模板方法模式 Template Method Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc Account.java
 *
 * */
 
package com.javapatterns.templatemethod;
 
/**
 *抽象类  账号
 * @author geovindu
 *
 * */
abstract public class Account {
    /**
     *
     *
     * */
    protected String accountNumber;
    /**
     *
     *
     * */
    public Account()
    {
        accountNumber = null;
    }
    /**
     *
     *
     * */
    public Account(String accountNumber)
    {
        this.accountNumber = accountNumber;
    }
    /**
     * 模板方法,计算利息数据数额
     * @return  返回利息数额
     * */
    final public double calculateInterest()
    {
        double interestRate = doCalculateInterestRate();
        String accountType = doCalculateAccountType();
        double amount = calculateAmount(accountType, accountNumber);
 
        return amount * interestRate;
    }
    /**
     *基本方法留给子类实现
     *账户类型
     * @return
     * */
    abstract protected String doCalculateAccountType() ;
    /**
     *基本方法留给子类实现
     * @return
     * */
    abstract protected double doCalculateInterestRate() ;
    /**
     *基本方法已经实现
     * @param accountType 输入类型
     * @param accountNumber  数字类型
     * @return
     * */
    final public double calculateAmount(String accountType, String accountNumber)
    {
        this.accountNumber=accountNumber;
        double rs=3.00D;
        if(accountType=="Certificate of Deposite" && accountNumber=="1")
        {
            rs=8888.00D;
 
        }
        if(accountType=="Certificate of Deposite" && accountNumber=="2")
        {
            rs=100000.00D;
        }
 
        if(accountType=="Money Market" && accountNumber=="1")
        {
            rs=8888.00D;
 
        }
        if(accountType=="Money Market" && accountNumber=="2")
        {
            rs=100000.00D;
        }
        return rs;
    }
 
}

  

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 模板方法模式 Template Method Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc MoneyMarketAccount.java
 *
 * */
 
 
 
package com.javapatterns.templatemethod;
/**
 *货币市场账号
 * @author geovindu
 *
 * */
public class MoneyMarketAccount  extends Account {
    /**
     *基本方法这里实现
     *
     * @return
     * */
    public String doCalculateAccountType()
    {
        return "Money Market";
    }
    /**
     *基本方法这里实现
     *利率
     * @return
     * */
    public double doCalculateInterestRate()
    {
        return 0.045D;
    }
 
 
 
}

  

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
32
33
34
35
36
37
38
39
40
41
42
43
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 模板方法模式 Template Method Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc CDAccount.java
 *
 * */
 
 
package com.javapatterns.templatemethod;
/**
 *具体子类 定期存款账号
 * @author geovindu
 * */
public class CDAccount extends Account {
 
 
    /**
     *基本方法这里实现
     * @return
     * */
    public String doCalculateAccountType()
    {
        return "Certificate of Deposite";
    }
    /**
     *基本方法这里实现
     *利率
     * @return
     * */
    public double doCalculateInterestRate()
    {
        return 0.065D;
    }
}

  调用测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//模板方法模式
           Account acct = null;
           acct = new MoneyMarketAccount();
           acct.calculateAmount("Money Market","1");
           System.out.println("Amount: 8888.00DInterest earned from Money Market account = " + acct.calculateInterest());
           acct = new CDAccount();
           acct.calculateAmount("Certificate of Deposite","1");
           System.out.println("Amount: 8888.00D Interest earned from CD account = " + acct.calculateInterest());
 
           acct = new MoneyMarketAccount();
           acct.calculateAmount("Money Market","2");
           System.out.println("Amount: 100000.00D  Interest earned from Money Market account = " + acct.calculateInterest());
           acct = new CDAccount();
           acct.calculateAmount("Certificate of Deposite","2");
           System.out.println("Amount: 100000.00D  Interest earned from CD account = " + acct.calculateInterest());

  

输出:

1
2
3
4
Amount: 8888.00DInterest earned from Money Market account = 399.96
Amount: 8888.00D Interest earned from CD account = 577.72
Amount: 100000.00D  Interest earned from Money Market account = 4500.0
Amount: 100000.00D  Interest earned from CD account = 6500.0

  

posted @   ®Geovin Du Dream Park™  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5
点击右上角即可分享
微信分享提示