1 定义
- 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中去。
- 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2 UML
3 代码实现
**抽象模板类**
public abstract class AbstractClass {
public void methondOne(){
System.out.println("方法1");
}
public void methondTwo(){
System.out.println("方法2");
}
public final void TemplateMethod(){
methondOne();
methondTwo();
}
}
**具体实现类A
public class ConcreteClass extends AbstractClass {
@Override
public void methondOne(){
System.out.println("具体方法1");
}
@Override
public void methondTwo(){
System.out.println("具体方法2");
}
}
具体实现类B
public class ConcreteClassB extends AbstractClass {
@Override
public void methondOne(){
System.out.println("具体B方法1");
}
@Override
public void methondTwo(){
System.out.println("具体B方法2");
}
}
测试类**
public class Main {
public static void main(String[] args){
AbstractClass abstractClass;
abstractClass=new ConcreteClass();
abstractClass.TemplateMethod();
abstractClass=new ConcreteClassB();
abstractClass.TemplateMethod();
}
}
4 总结
4.1 优点:
1. 封装不变部分,扩展可变部分。
2. 提取公共代码,便于维护。
3. 行为由父类控制,子类实现。
4.2 缺点:
1. 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
4.3 使用场景:
1. 有多个子类共有的方法,且逻辑相同。
2. 重要的、复杂的方法,可以考虑作为模板方法。
注意事项:为防止恶意操作,一般模板方法都加上 final 关键词。