结合项目实例 回顾传统设计模式(八)模板方法模式

模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。

普通的设计算法由实现类直接控制,在很多功能类似的对象中存在重复。并且由于类的组织方式不具有弹性,所以往往新加入新的相似模块时需要作大量冗余的步骤。

我们还是那电商的订单提交来说事 ~ ~

/// <summary>
    
/// 模板类
    
/// </summary>
    public abstract class OrderSubmit
    {
        public OrderSubmit()
        {
            //检查购物车
            CheckCart();
            //检查支付方式
            CheckPaytype();
            //检查用户地址
            CheckAddress();
            //提交订单
            SubmitOrderInfo();
            //钩子 根据子类是否需要来实现
            if (hookflag())
            {
                //生成发票
                CreateInvoice();
            }

        }
        public abstract void CheckCart();
        public abstract void CheckPaytype();
        public void CreateInvoice()
        {
            //生成发票具体方法
        }
        public void CheckAddress()
        {
            //用户地址检查
        }
      
        public void SubmitOrderInfo()
        {
            //订单提交详细
        }
        public bool hookflag()
        {
            return true;
        }

    }

    /// <summary>
    
/// 主站订单提交
    
/// </summary>
    public class webOrderSubmit : OrderSubmit
    {
        public override void CheckCart()
        {
            //检查属于网站的购物车信息
        }
        public override void CheckPaytype()
        {
            //检查属于网站的支付方式
        }
        public  void CreateInvoice()
        {
            //生成发票
        }
      
 
    }

    /// <summary>
    
/// 移动终端订单提交
    
/// </summary>
    public class MoblieOrderSubmit : OrderSubmit
    {
        public override void CheckCart()
        {
            //检查属于移动终端的购物车信息
        }
        public override void CheckPaytype()
        {
            //检查属于动终端的支付方式
        }
        //不要发票
        public bool hookflag()
        {
            return false;
        }
      

    }

总结:模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。和其他模式相比,模板方法由子类决定如何实现算法中得步骤;策略模式则是封装可互换的行为,然后使用委托来决定要采用哪一个行为;工厂模式由子类决定实例化哪个具体类。

原创作品允许转载,转载时请务必以超链接形式标明文章原始出处以及作者信息。
作者:熬夜的虫子
点击查看:博文索引
原文地址:https://www.cnblogs.com/dubing/p/2199945.html