模板方法模式(Template Method Pattern)

本文介绍了模板方法设计模式的概念和应用。通过一个税务申报的例子,展示了如何使用模板方法模式来定义算法骨架,同时允许子类重定义特定步骤,而不改变整体结构。这种模式有助于代码复用和扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
代表这些具体实现的方法同常称作基本方法(Primitive Method),而调用这些基本方法的方法叫做模板方法(Template Method)。

public abstract class BasicTax



事实上,不同的州政府设定的税率或是计算方法有可能是不同的,联邦政府在某些时期对税率也会有所调整,所以BasicTax抽象类的创建者不必关心给个州的税率是如何的,也 不必关心联邦政府会在什么时候调整税率,他只要知道报税人要么报税要么申请破产就可以了,

BasicTax是个抽象类,你没有办法直接实例化它,你要做的就是创建一个继承自BasicTax的派生类,并实现caculateStateTax和caculateFedTax这两个抽象方法。

//华盛顿州报税具体实现
public calss WashingtonTax : BasicTax
{
 
//实现抽象方法
 protected override float calculateStateTax()
 
{
  
return income*0.12F;
 }


 
protected override float calculateFedTax()
 
{
  
return income*0.23F;
 }

}


//犹他州报税具体实现
public class UltahTax : BasicTax
{
 
//实现抽象方法
 protected override float calculateStateTax()
 
{
  
return income*0.24F;
 }


 
protected override float calculateFedTax()
 
{
  
return income*0.23F;
 }

}


从上面的代码中你可以看到,WashingtonTax和UltahTax分别为华盛顿州和犹他州报税方法提供了具体的实现

BasicTax WATax = new WashingtoTax();
WATax.ReportTax();

BasicTax UTTax 
= new UltahTax();
UTTax.ReportTax();

好了让我们来回顾一下,在BasicTax的例子中ReportTax其实就是一个模板方法,这个方法描述了报税时所要执行的步骤,却没有描述每一步是如何执行的,因为它所依赖的方法还没有实现。模板方法强调的是不同对象之间及方法之间如何协作。
在实际情况中,模板方法通常包含了业务领域知识,这些领域知识规定了不同方法是如何协作的;抽象方法为模板方法调用的方法提供了客户化实现的手段。

模板方法描述了特定操作步骤的骨架或是处理流程,而不是直接规定给个操作该如何执行,将抽象与具体分割开来,从而保证代码可以最大限度地被复用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值