using System;
using System.Collections.Generic;
using System.Text;
namespace DesignPattern.BehaviorPattern.TemplateMethodPattern
{
public class TemplateMethod
{
//模板方法设计模式 抽象父类+子类 把变化和不变的部分分开,不变的放到抽象父类,可能变的定义成虚方法,变化的部分抽象化,让子类去实现
//方便以后扩展
public static void Show()
{
AbstractClient myClient = new Client();
myClient.Login("xiaogao","124");
myClient.QueryBalance();
myClient.CalculationInterest();
AbstractClient creditClient = new CreditClient();
creditClient.Login("xiaogao", "124");
creditClient.QueryBalance();
creditClient.CalculationInterest();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DesignPattern.BehaviorPattern.TemplateMethodPattern
{
public abstract class AbstractClient
{
//登录 所有的子类登录应该是一样的,就固定到抽象父类
public void Login(string account, string password)
{
Console.WriteLine("登录成功");
}
//查询余额 信用卡可能欠费 方法有可能变化
public virtual void QueryBalance()
{
Console.WriteLine("你有1000元");
}
//计算利息,不同种类客户的计算利息规则是不一样的,这部分是变化的,就定义成抽象
public abstract void CalculationInterest();
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DesignPattern.BehaviorPattern.TemplateMethodPattern
{
public class Client : AbstractClient
{
public override void CalculationInterest()
{
Console.WriteLine($"你的利息是{1000 * 0.02}元");
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DesignPattern.BehaviorPattern.TemplateMethodPattern
{
public class CreditClient : AbstractClient
{
public override void QueryBalance()
{
Console.WriteLine("你有-100元");
}
public override void CalculationInterest()
{
Console.WriteLine($"你的利息是{1000*0.05}元");
}
}
}