比较Template method、Strategy和Builder模式随想

Template methodStrategy模式经常在框架设计中被使用,并且二者很相似,都是父类定义功能接口,将具体的实现留个子类,有时二者可以相互替换。

Template method主要是父类将一个功能的实现分成几个小的步骤,并且在模版方法中规定了这些步骤的执行顺序,同时定义了这些子步骤的protected类型的方法留给子类实现,声明为protected主要是以防止用户不恰当的使用这些方法而产生异常。实现者不需要考虑这些子步骤地执行顺序,只需要实现具体的功能就行了。其实每一个子类去具体的实现这些子步骤,也有策略的味道,只不过Template method主要是在父类封装了子步骤地顺序,从而简化用户的负担以及减少重复的代码的目的。

Strategy模式主要是父类(更常用的是接口)定义一个具体的功能,不同的子类使用不同的策略去具体的实现。其实针对接口编程,一方面达到依赖于接口而不是具体实现的目的,另一方面也是策略模式的一个实现吧,接口规定了功能,不同的实现者提供了不同的策略。常用的Dao模式提供了隔离数据访问与业务层的同时,也提供了可替换的策略,来方便在不同的数据库间移植,或者使用不同的技术来实现。

Template method适用域可能更小一点,灵活性也差一点。如果子类也可以订制这些子步骤的顺序,那就不适合使用Template。使用策略模式,则没有那么多的限制,甚至常常没有子步骤。不过实现者需要知道整个算法的流程,同时也可能暴露过多的行为,从而可能造成使用者误用的可能。

谈到Template method,我倒想到了Builder模式,虽然二者一个是行为模式,一个是创建型模式,但是二者还是有不少相似之处的。Builder模式是隐藏创建的过程,使用者只需要使用build方法就能够获得整个要创建的东西,而不需要考虑具体的创建步骤,Builder模式其实也算(或者可以)用模版方法来实现,只不过这个模版方法是创建对象的而已。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值