模板方法模式在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。(该定义来源于《深入浅出设计模式》)
下面举一个该模式的例子。该例子先抽象了某个人一天的生活:起床,上课,如果不打球就背单词,睡觉,接着又具体描述了星期一和星期二的生活。具体的实现代码如下:
package templatemethod; /** * 该类抽象了一天做的事儿,及其步骤 * @author yuncong * */ public abstract class Day { public final void doThings() { getUp(); attendClass(); if (!isPlayBasketball()) { reciteWords(); } else { playBasketball(); } sleep(); } public void getUp() { System.out.println("get up"); } public abstract void attendClass(); public void reciteWords() { System.out.println("recite words"); } public void playBasketball() { System.out.println("play basketball"); } /** * 一个钩子 * @return */ public boolean isPlayBasketball() { return false; } public void sleep() { System.out.println("sleep"); } }
package templatemethod; /** * 星期一,上数据结构,背单词 * @author yuncong * */ public class Mondey extends Day { @Override public void attendClass() { // TODO Auto-generated method stub System.out.println("data structure"); } }
package templatemethod; /** * 星期二,上操作系统,打篮球 * @author yuncong * */ public class Tuesday extends Day { @Override public void attendClass() { // TODO Auto-generated method stub System.out.println("operate system"); } public boolean isPlayBasketball() { return true; } }
package templatemethod; public class Live { public static void main(String[] args) { // TODO Auto-generated method stub Day day = new Mondey(); day.doThings(); System.out.println("............"); day = new Tuesday(); day.doThings(); } }
原文地址:http://blog.csdn.net/l294265421/article/details/46274435