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

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

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

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

 

///  
    
///  模板类
    
///  

     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;
        }

    }

     ///  
    
///  主站订单提交
    
///  

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

     ///  
    
///  移动终端订单提交
    
///  

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

    }

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

你可能感兴趣的:(结合项目实例 回顾传统设计模式(八)模板方法模式)