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

3 模板方法模式应用实例

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

 

      1. 实例说明

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

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

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

      (3) 系统显示利息。

      试使用模板方法模式设计该利息计算模块。

     

       2. 实例类图

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

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

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

 

       3. 实例代码

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

  1. //Account.cs  
  2. using System;  
  3.   
  4. namespace TemplateMethodSample  
  5.  
  6.     abstract class Account  
  7.      
  8.         //基本方法——具体方法  
  9.         public bool Validate(string account, string password)   
  10.          
  11.             Console.WriteLine("账号:{0}"account);  
  12.             Console.WriteLine("密码:{0}"password);  
  13.             //模拟登录  
  14.             if (account.Equals("张无忌"&& password.Equals("123456"))   
  15.              
  16.                 return true 
  17.              
  18.             else   
  19.              
  20.                 return false 
  21.              
  22.          
  23.   
  24.         //基本方法——抽象方法  
  25.         public abstract void CalculateInterest();  
  26.   
  27.         //基本方法——具体方法  
  28.         public void Display()   
  29.          
  30.             Console.WriteLine("显示利息!");  
  31.          
  32.   
  33.         //模板方法  
  34.         public void Handle(string account, string password)   
  35.          
  36.             if (!Validate(account,password))   
  37.              
  38.                 Console.WriteLine("账户或密码错误!");  
  39.                 return 
  40.              
  41.             CalculateInterest();  
  42.             Display();  
  43.          
  44.      
  45.  

       (2) CurrentAccount:活期账户类,充当具体子类。

  1. //CurrentAccount.cs  
  2. using System;  
  3.   
  4. namespace TemplateMethodSample  
  5.  
  6.     class CurrentAccount Account  
  7.      
  8.         //覆盖父类的抽象基本方法  
  9.         public override void CalculateInterest()   
  10.          
  11.             Console.WriteLine("按活期利率计算利息!");  
  12.          
  13.      
  14.  

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

  1. //SavingAccount.cs  
  2. using System;  
  3.   
  4. namespace TemplateMethodSample  
  5.  
  6.     class SavingAccount Account  
  7.      
  8.         //覆盖父类的抽象基本方法  
  9.         public override void CalculateInterest()   
  10.          
  11.             Console.WriteLine("按定期利率计算利息!");  
  12.          
  13.      
  14.  

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

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

       

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    原文地址:https://www.cnblogs.com/luckForever/p/7254829.html