定义:
在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.
模版方法可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤.
关键词:
Template
结构图:
应用场景:
当不变的行为和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现.我们通过模版方法模式把这些行为搬到单一的地方,这样就可以帮助子类摆脱重复的不变的行为.
例子:
类图:
代码:
public abstract class Shopping { public Shopping() { // //TODO: 在此处添加构造函数逻辑 // } public void Buy() { GOTOShop(); BuySome(); GOBackHome(); } protected void GOTOShop() { HttpContext.Current.Response.Write("去商店<br/>"); } protected abstract void BuySome(); protected void GOBackHome() { HttpContext.Current.Response.Write("回家<hr/>"); } } public class BuyWindow : Shopping { protected override void BuySome() { HttpContext.Current.Response.Write("买窗户<br/>"); } } public class BuyDoor : Shopping { protected override void BuySome() { HttpContext.Current.Response.Write("买门<br/>"); } }
页面调用:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Shopping sp1 = new BuyWindow(); sp1.Buy(); Shopping sp2 = new BuyDoor(); sp2.Buy(); } }
效果: