一、引言

说到模板,顾名思义:就是样板,整体架构已经有了,你只需要填充自己的特定内容就可以了。如:简历模板,论文模板,PPT模板等

在软件设计中,模板方法模式与之很相似,下面请看我们今天要学习的模板方法模式

二、模板方法模式

定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

下面结构图:

面向对象编程思想-模板方法模式

抽象模板角色(AbstractClass):在抽象类中定义一个或多个基本操作,每一个操作对应算法中一个步骤;同时提供一个模板方法用户定义基本方法的操作次序,而通过子类覆写某些步骤,从而使得相同的算法框架可以有不同的执行结果

具体模板角色(Concrete):实现父类中声明的抽象基本操作以完成子类特定算法的步骤

场景:公司要为银行做一个利息计算系统,流程首先验证用户登录是否正确,如果登录失败提示错误信息,然后如果登录成功,根据用户不同类型使用不同计算公式计算利息,最后展示利息计算结果

下面该业务场景demo:

    abstract class Account
    {
        //基本方法-具体方法
        public bool validate(string uid,string password)
        {
            Console.WriteLine($"uid is {uid},pwd is {password}");
            
            if(uid.Equals("michael")&&password.Equals("123456"))
            {
                return true;
            }
            else { return false; }
        }
        //基本方法-抽象方法
        public abstract void Calculate();
        //基本方法-具体方法
        public void Display()
        {
            Console.WriteLine("显示利息");
        }
        //模板方法
        public void Handle(string uid, string password)
        {
            if(!validate(uid, password))
            {
                Console.WriteLine("您输入的账号密码有误");
                return;
            }
            Calculate();
            Display();
        }
    class CurrentAccount : Account
    {
        //覆写父类抽象的基本方法
        public override void Calculate()
        {
            Console.WriteLine("请使用活期利率计算利息");
        }
    }
    class RegularAccount : Account
    {
        public override void Calculate()
        {
            Console.WriteLine("请使用定期利率计算利息");
        }
    }
    static void Main(string[] args)
        {
            string type= ConfigurationManager.AppSettings["account"];
            object obj= Assembly.Load("TemplateMethodPattern").CreateInstance(type);
            (obj as Account).Handle("michael", "123456");
            Console.Read();
        }
        //xml配置项
    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="account" value="TemplateMethodPattern.CurrentAccount"/>
  </appSettings>
</configuration>    
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-16
  • 2022-01-08
  • 2022-02-08
  • 2022-02-26
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案