Template method & Strategy

本文探讨了模板方法和策略模式在软件设计中的应用及区别。通过实例说明两种模式如何解决相似问题,并强调了在何种情况下选择使用策略模式更为合适。

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

Template method 和Strategy 在绝大多数情况向都可以完成相同的任务,即以某种步骤完成任务而又不依赖于具体步骤的实现。Template method 降具体步骤的实现留给了子类而Strategy则将具体实现留给任何遵循摸一特定接口的类。绝大多数的framework都可以找到两者中至少一个。
 
两者间的区别在于Template method使用继承来达到目的。而继承是一种强耦合,它使子类依赖于父类。其弊病在子类的代码也需要复用时体现出来。详细的例子在Uncle Bob的Agile Software Development中有:对于大多数排序算法而言,swap,outOfOrder都是必需的操作,因此他们不因成为某算法的子类。而Strategy则提供更松的耦合,其swap,outOfOrder也可以被很多不同算法使用
 
被很多不同算法使用”,正是这一点决定着是否使用Strategy,即当你的具体步骤的实现不是只会被起父类使用而是有其他类也需要使用时,it's time for Strategy。
 
其实这两者的区别就是继承和组合的区别。
 
现实中的例子可以是Web framework中的controller机制。绝大多数都是Strategy,有一个总控的servlet,负责解析url和分发request到下一级controller(例如Struts 中的Action或Spring的Controller),这些下一级controller就是Strategy,由用户具体实现。如果仅是如此,Template method一样可以胜任,继承那个总控的Servlet就是了(就像Oscar一样),毕竟,这些子类往往不会被其他的代码使用。然而,如果需要Preprocessor和Postprocessor的话就一定要用Strategy了,这些processor往往用来处理一些公用的东西,很多的controller都会用到。仍然使用template method会造成code duplication。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值