标签:
一、模板方法的定义
Template Method Pattern:Definethe skeleton of an algorithm in an operation,deferring some steps tosubclasses.Template Methodletssubclasses redefine certain steps of an algorithmwithoutchanging the algorithm‘s structure.
定义一个操作中算法的骨架,将一些步骤的执行延迟到子类,模板方法让子类在不改变算法的结构下重新定义一个算法的步骤。
二、模板方法的应用场景
根据模板方法的定义,定义一个操作中的算法的骨架,其实就是在抽象类中定义一个模板方法,该模板方法里面会有一系列的方法的执行步骤,其中有些方法是该抽象类中的方法,它是所有子类公用的方法,有些方法是需要在子类中去实现的方法。因此,模板方法通常使用在,对于不同类型的他们具有相同的执行步骤,并且他们具有部分相同的行为。我们可以将相同的行为提取到抽象父类中去实现,不同的行为留给子类实行,从而实现代码的复用。模板方法是基于继承实现的代码复用技术。下面我们将通过一个例子来理解模板方法的使用。
三、模板方法示例
现在假设我们需要构造一个建造房子的算法。建造一个房子需要包含以下几个步骤:
建地基 、建柱子、砌墙及建窗户。 假设这些步骤的执行顺序不能颠倒,及建地基必须在前其次建柱子,砌墙在建窗户,实际建房子其实也是这个基本步骤来的,那么下面我需要建两种类型的房子,一个是木房,一个是玻璃房。并且建地基和窗户是两种房子的共同的行为。那么下面我们将通过模板方法来实现这个过程。
1 public abstract class HouseTemplate { 2 3 public final void buildHouse(){ 4 buildFoundation(); 5 buildPillars(); 6 buildWalls(); 7 buildWindows(); 8 System.out.println("House is built."); 9 } 10 11 private void buildFoundation() 12 { 13 System.out.println("build foundation"); 14 } 15 private void buildWindows() 16 { 17 System.out.println("build windows"); 18 } 19 20 protected abstract void buildPillars(); 21 22 protected abstract void buildWalls(); 23 24
25 }
1 public class GlassHouse extends HouseTemplate{ 2 3 @Override 4 protected void buildPillars() { 5 System.out.println("Building Glass Walls"); 6 7 } 8 9 @Override 10 protected void buildWalls() { 11 System.out.println("Building Pillars with glass coating"); 12 13 } 14 15 }
public class WoodenHouse extends HouseTemplate{ @Override protected void buildPillars() { System.out.println("Building Wooden Walls"); } @Override protected void buildWalls() { System.out.println("Building Pillars with Wood coating"); } }
1 public class HousingClient { 2 3 public static void main(String args[]) 4 { 5 HouseTemplate houseType = new WoodenHouse(); 6 7 //using template method 8 houseType.buildHouse(); 9 System.out.println("************"); 10 11 houseType = new GlassHouse(); 12 13 houseType.buildHouse(); 14 } 15 16 }
程序的输出结果如下:
build foundation
Building Wooden Walls
Building Pillars with Wood coating
build windows
House is built.
************
build foundation
Building Glass Walls
Building Pillars with glass coating
build windows
House is built.
在抽象的父类中我们定义了buildHouse这个模板方法,该模板方法定义了算法的骨架,并将对buildPillars 和buildWalls的执行延迟到子类中执行。并且该模板方法被定义成final的,防止子类覆写来改变父类的行为,从而违反“开闭原则”。
四、模板方法总结
标签:
原文地址:http://www.cnblogs.com/justinli/p/template.html