传统设计模式(八)模板方法模式2016-02-11模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。普通的设计算法由实现类直接控制,在很多功能类似的对象中存在重复。并且由于类的组织方式不具有弹性,所以往往新加入新的相似模块时需要作大量冗余的步骤。我们还是那电商的订单提交来说事 ~ ~
/// <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(){//检查属于网站的支付方式}publicvoid CreateInvoice(){//生成发票} }/// <summary>/// 移动终端订单提交/// </summary>public class MoblieOrderSubmit : OrderSubmit{public override void CheckCart(){//检查属于移动终端的购物车信息}public override void CheckPaytype(){//检查属于动终端的支付方式}//不要发票public bool hookflag(){return false;}}
总结:模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。和其他模式相比,模板方法由子类决定如何实现算法中得步骤;策略模式则是封装可互换的行为,然后使用委托来决定要采用哪一个行为;工厂模式由子类决定实例化哪个具体类。