模式概述:
它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。
使用场景:
- 当你只希望客户端扩展某个特定算法步骤, 而不是整个算法或其结构时, 可使用模板方法模式。
- 当多个类的算法除一些细微不同之外几乎完全一样时, 你可使用该模式。 但其后果就是, 只要算法发生变化, 你就可能需要修改所有的类。
代码样例:
/**
* 超类
*/
public abstract class SeekGirlTempplate {
/**
* 撩妹方法(一个模板方法)
*/
public final boolean seekGril(){
boolean result = false;
if(addFriend()){
meet();
result = confession();
}
return result;
}
/**
* 添加好友
*/
public abstract boolean addFriend();
/**
* 交往
*/
public abstract void meet();
/**
* 表白
*/
public abstract boolean confession();
}
/**
* 艺术家
*/
public class Artist extends SeekGirlTempplate{
@Override
public boolean addFriend() {
System.out.println("文艺气息不由自主的散发,吸引了girl,要到了联系方式");
return true;
}
@Override
public void meet() {
System.out.println("每天一封情书");
}
@Override
public boolean confession() {
System.out.println("一封长达两万字的告白情诗");
return true;
}
}
/**
* 程序员
*/
public class Programmer extends SeekGirlTempplate{
@Override
public boolean addFriend() {
System.out.println("通过专业技能,爬取girl联系方式");
return true;
}
@Override
public void meet() {
System.out.println("与girl谈论植发之路?");
}
@Override
public boolean confession() {
System.out.println("又土又木?");
return false;
}
}
/**
* 测死模板方法
*/
public class TestTemplateMethod {
public static void main(String[] args) {
SeekGirlTempplate seekGirlTempplate = new Programmer();
boolean result = seekGirlTempplate.seekGril();
System.out.println("撩妹结果:"+result);
}
}
测试结果;