使用环境:
当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时。通常考虑用模板方法模式处理。
尤其是遇到由一系列步骤构成的过程需要执行。这个过程从高层次上看是相同的,但是有些步骤的实现可能不同。可以考虑用模板方法模式。
解释:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
抽象类,即模板类:
客户端调用:
优点:
通过把不变行为搬移到超类,去除子类中的重复代码。
提供了一个很好的代码复用平台。
当不变的合可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过使用模板方法模式,把这些行为搬移到单一的地方,这样就帮助子类拜托重复的不变行为的纠缠。
应用:
模板方法模式是很常用的模式,对继承和多态玩的好的人几乎都会在继承体系中多多少少用到它。
.NET或Java类库的设计中,通常都会利用模板方法模式提取类库中的公共行为到抽象类中。
例子:
试卷类:
客户端:
继承:
所有重复的代码都应该要上升到父类去,而不是让每个子类都去重复。