1 定义
定义一个操作中的算法的骨架
,而将一些步骤延迟到子类中
。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
。重定义操作通过覆写模版方法里面的抽象方法
而实现。
2 实质
通过把不变行为迁移到超类
,去除子类中的重复代码
。
3 优势
模版方法模式提供了一个很好的代码复用平台
。
4 应用场景
当我们要完成在某一细节层次一致的一个过程或一系列的步骤,但个别步骤在更详细的层次上的实现可能不同时,通常考虑用模版方法模式处理。
5 UML图
6 例子
6.1UML图
6.2 code
Client
package designmodel.tenthchapter;
/**
* @Author: cxh
* @CreateTime: 18/1/7 19:27
* @ProjectName: JavaBaseTest
*/
public class Client{
public static void main(String[] args) {
//A试卷
System.out.println("A试卷信息:");
PaperA a=new PaperA();
a.templateMethod();
//B试卷
System.out.println("B试卷信息:");
PaperB b=new PaperB();
b.templateMethod();
}
}
AbstractPaper
package designmodel.tenthchapter;
/**
* @Author: cxh
* @CreateTime: 18/1/7 19:15
* @ProjectName: JavaBaseTest
*/
public abstract class AbstractPaper {
//三个抽象行为,作为逻辑骨架的组合内容.
public abstract void primitiveOperation1();
public abstract void primitiveOperation2();
public abstract void primitiveOperation3();
//逻辑框架1,组合了1,2,3抽象行为
public void templateMethod(){
primitiveOperation1();
primitiveOperation2();
primitiveOperation3();
}
}
PaperA
package designmodel.tenthchapter;
/**
* @Author: cxh
* @CreateTime: 18/1/7 19:20
* @ProjectName: JavaBaseTest
*/
public class PaperA extends AbstractPaper {
@Override
public void primitiveOperation1() {
System.out.println("第一题答案是:A");
}
@Override
public void primitiveOperation2() {
System.out.println("第二题答案是:B");
}
@Override
public void primitiveOperation3() {
System.out.println("第三题答案是:E");
}
}
PaperB
package designmodel.tenthchapter;
/**
* @Author: cxh
* @CreateTime: 18/1/7 19:26
* @ProjectName: JavaBaseTest
*/
public class PaperB extends AbstractPaper {
@Override
public void primitiveOperation1() {
System.out.println("第一题答案是:B");
}
@Override
public void primitiveOperation2() {
System.out.println("第二题答案是:C");
}
@Override
public void primitiveOperation3() {
System.out.println("第三题答案是:D");
}
}