行为型模式-模板方法模式

        定义一个操作框架,将一些具体的步骤延迟到子类中实现。使子类可以在不改变算法的结构上可以重定义改算法的某些特定步骤。

         封装不变的部分,扩展可变部分,把不便的部分封装到父类中实现,可变的部分通过继承在子类中实现。

         模板方法角色:

         AbstractClass定义一个模板,其子类将重定义PrimitiveOperation1PrimitiveOperation2操作

      ConcreteClass:实现PrimitiveOperation1PrimitiveOperation2以完成算法中与特定子类(Client)相关的内容。

      在模板方法模式中,AbstractClass中的TemplateMethod提供了一个标准模板,该模板包含PrimitiveOperation1PrimitiveOperation2两个方法,这两个方法的内容Client可以根据自己的需要重写。


结构图:



namespace Libraries.Test.DesignPattern.TemplateMethod
{
    /// <summary>
    /// 快递接口查询
    /// </summary>
    public abstract class Express
    {
        /// <summary>
        /// 验证快递公司和快递单号
        /// </summary>
        /// <param name="postCompany"></param>
        /// <param name="postNo"></param>
        /// <returns></returns>
        private bool Validate(string postCompany, string postNo)
        {
            bool result = false;
            result = true;
            return result;
        }


        /// <summary>
        /// 模板方法
        /// </summary>
        /// <param name="postCompany"></param>
        /// <param name="postNo"></param>
        /// <returns></returns>
        public string Excute(string postCompany, string postNo)
        {
            string str = "";
            bool result = Validate(postCompany, postNo);
            if (!result)
            {
                str = "快递公司或快递单号不符合规则";
                return str;
            }

            //模板方法执行操作
            str = Realization(postCompany, postNo);
            return str;
        }


        protected abstract string Realization(string postCompany, string postNo);
    }
}
namespace Libraries.Test.DesignPattern.TemplateMethod
{
    public class Kuaidi100 : Express
    {
        protected override string Realization(string postCompany, string postNo)
        {
            return "通过Kuaidi100来查询快递信息:" + postCompany + "," + postNo;
        }
    }
}
namespace Libraries.Test.DesignPattern.TemplateMethod
{
    public class Kdniao : Express
    {
        protected override string Realization(string postCompany, string postNo)
        {
            return "通过Kdniao来查询快递信息:" + postCompany + "," + postNo;
        }
    }
}
namespace Libraries.Test.DesignPattern.TemplateMethod
{
    public class Client
    {
        public void Excute()
        {
            //Kdniao查询
            Express kdniao = new Kdniao();
            string kdniaoStr = kdniao.Excute("圆通", "12542154125");

            //Kuaidi100查询
            Express kuaid100 = new Kuaidi100();
            string kuaid100Str = kuaid100.Excute("韵达", "1254215421");

        }
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值