模板方法模式深度解析(二)

    下面通过一个应用实例来进一步学习和理解模板方法模式。

    1. 实例说明

    某软件公司欲为某银行的业务支撑系统开发一个利息计算模块,利息计算流程如下:

    (1) 系统根据账号和密码验证用户信息,如果用户信息错误,系统显示出错提示;

    (2) 如果用户信息正确,则根据用户类型的不同使用不同的利息计算公式计算利息(如活期账户和定期账户具有不同的利息计算公式);

    (3) 系统显示利息。

    1. 实例类图

    通过分析,本实例结构图如图3所示。

    图3 银行利息计算模块结构图

    在图3中,Account充当抽象类角色,CurrentAccount和SavingAccount充当具体子类角色。

    1. 实例代码

    (1) Account:账户类,充当抽象类。

    1. using System;
    2. namespace TemplateMethodSample
    3. {
    4. class CurrentAccount : Account
    5. {
    6. public override void CalculateInterest()
    7. Console.WriteLine("按活期利率计算利息!");
    8. }
    9. }
    10. }

    (3) SavingAccount:定期账户类,充当具体子类。

    (4) 配置文件App.config,在配置文件中存储了具体子类的类名。

    1. <?xml version="1.0" encoding="utf-8" ?>
    2. <configuration>
    3. <appSettings>
    4. <add key="subClass" value="TemplateMethodSample.CurrentAccount"/>
    5. </configuration>

    (5) Program:客户端测试类

    1. 结果及分析

    编译并运行程序,输出结果如下:

    1. 账号:张无忌
    2. 密码:123456
    3. 按活期利率计算利息!
    4. 显示利息!

    如果需要更换具体子类,无须修改源代码,只需修改配置文件App.config,例如将活期账户(CurrentAccount)改为定期账户(Saving Account),只需将存储在配置文件中的具体子类CurrentAccount改为SavingAccount,如下代码所示:

    1. 账号:张无忌
    2. 密码:123456
    3. 按定期利率计算利息!