定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
例如:男孩子追求女孩子的步骤如下,取得联系,约见她,讨好她。但不同的人会用不同的方法去约见,有的人会打电话,有的人会发email;讨好的方式也不一样,有的人会送花,有的人会给女孩子唱歌。
package pattern;
abstract class PleaseGirl {
public abstract void contact();
public void meetGirl() {
System.out.println("I meet with her successfully.");
}
public abstract void pleaseGirl();
}
class Method1 extends PleaseGirl {
public void contact() {
System.out.println("I contact with her using phone.");
}
public void pleaseGirl() {
System.out.println("I present a bunch of flowers to her.");
}
}
class Method2 extends PleaseGirl {
public void contact() {
System.out.println("I contact with her using email.");
}
public void pleaseGirl() {
System.out.println("I sing a pop song to her.");
}
}
public class Template {
public static void main(String[] args) {
PleaseGirl a = new Method2();
a.contact();
a.meetGirl();
a.pleaseGirl();
}
}
有了这个模版,不同的人可以根据自己的喜好灵活采用不同的方法,达到最终的目的。