设计模式行为型之模板方法
模板方法应该是比较常见的设计模式之一,这里用一个场景(23种设计模式就是用来解决不同场景的方法)来说明什么是模板方法。假设有这样一个场景,通过手机去查询我们自己的账户,银行会发送一个短信返回给用户,而用户角色有普通用户/vip用用户或者叫做定期/活期用户,根据角色不同,短信内容和利息计算方式都不一样。在程序设计中,模板方法可以很好的解决这一问题。代码如下:
/// <summary> /// 定义父类 /// </summary> public abstract class AbstractCustomer { private string _userName; private string _pwd; private double _rate;//利率 public AbstractCustomer(string userName, string pwd,double rate) { this._userName = userName; this._pwd = pwd; this._rate = rate; } /// <summary> /// 存款 /// </summary> public double Balance { get { return new Random().Next(10000, 1000000); } } /// <summary> /// 利息 /// </summary> public double Interest { get { return Balance * _rate; } } public abstract void SendNote(); }
/// <summary> /// vip用户 /// </summary> public class Vip : AbstractCustomer { public Vip(string userName, string pwd) : base(userName, pwd,0.06) { } public override void SendNote() { Console.WriteLine($"尊敬的VIP客户,您卡上的余额为{Balance},利息为{Interest}"); } } /// <summary> /// 普通用户 /// </summary> public class Customer : AbstractCustomer { public Customer(string userName, string pwd) : base(userName, pwd, 0.03) { } public override void SendNote() { Console.WriteLine($"尊敬的客户,您卡上的余额为{Balance},利息为{Interest}"); } }
这样在抽象类中,定义不同角色的公有部分,在子类中单独实现不一样的业务,如果还有其它角色,只需要新增一个子类就可以了,符合开闭原则。