07-模板模式
概念
模板模式是一种常见的设计模式,在实现中经常可以看到,具体的使用场景为:整体流程大致相同,其中有部分方法实现不同。
例子
本文给出《大话设计模式》书中的例子,所有的试卷,除了答案不一样,其他的东西都一样
package com.gof.template;
/**
* 功能描述
*
* @since 2023-01-20
*/
public abstract class TestPaper {
abstract String answer1();
abstract String answer2();
abstract String answer3();
void answerQuestion1() {
System.out.println("题目一");
System.out.println(answer1());
}
void answerQuestion2() {
System.out.println("题目二");
System.out.println(answer2());
}
void answerQuestion3() {
System.out.println("题目三");
System.out.println(answer3());
}
}
package com.gof.template;
/**
* 功能描述
*
* @since 2023-01-20
*/
public class TestPaparStudent1 extends TestPaper {
@Override
String answer1() {
return "答案一";
}
@Override
String answer2() {
return "答案二";
}
@Override
String answer3() {
return "答案二";
}
}
package com.gof.template;
/**
* 功能描述
*
* @since 2023-01-20
*/
public class TestPaparStudent2 extends TestPaper {
@Override
String answer1() {
return "答案1";
}
@Override
String answer2() {
return "答案2";
}
@Override
String answer3() {
return "答案3";
}
}
package com.gof.template;
/**
* 功能描述
*
* @since 2023-01-20
*/
public class Client {
public static void main(String[] args) {
TestPaparStudent1 paparStudent1 = new TestPaparStudent1();
paparStudent1.answerQuestion1();
paparStudent1.answerQuestion2();
paparStudent1.answerQuestion3();
TestPaparStudent2 paparStudent2 = new TestPaparStudent2();
paparStudent2.answerQuestion1();
paparStudent2.answerQuestion2();
paparStudent2.answerQuestion3();
}
}
总结
模板方法的模式是通过把不变的逻辑移到超类,去除子类中的重复代码来体现其优势的,提供了一个很好的代码复用平台
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式吧这些行为搬移到单一的地方去,这样就帮助子类拜托重复的不变行为的纠缠。