模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。
普通的设计算法由实现类直接控制,在很多功能类似的对象中存在重复。并且由于类的组织方式不具有弹性,所以往往新加入新的相似模块时需要作大量冗余的步骤。
我们还是那电商的订单提交来说事 ~ ~
/// <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;
}
}
/// 模板类
/// </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;
}
}
总结:模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。和其他模式相比,模板方法由子类决定如何实现算法中得步骤;策略模式则是封装可互换的行为,然后使用委托来决定要采用哪一个行为;工厂模式由子类决定实例化哪个具体类。
本文转自 熬夜的虫子 51CTO博客,原文链接:http://blog.51cto.com/dubing/712414