0%

Template Method

Template Method


定义

定义一个操作中的算法的骨架

将一些步骤延迟到子类中

子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

核心思想

父类定义骨架

  • 骨架一般声明为final

子类实现(某些)细节

  • 需要子类实现的一般声明为protected

栗子

找到数组中最大的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package eternal.fire;

public abstract class TemplateMethod {
//找出数组中最大的元素
public final int findMax(int[] nums) {
//排序
sort(nums);
//返回最后的元素
return nums[nums.length - 1];
}

//这个sort怎么写,暂时还没想好,所以留给子类去实现
protected abstract void sort(int[] nums);
}
1
2
3
4
5
6
7
8
9
10
package eternal.fire;

import java.util.Arrays;

public class Max extends TemplateMethod {
@Override
protected void sort(int[] nums) {
Arrays.sort(nums);
}
}
1
2
3
4
5
6
7
8
9
10
package eternal.fire;

public class Main {
public static void main(String[] args) {
int[] nums = new int[]{1, 8, 1, 3, 0, 5, 0, 0, 2, 1, 8};
Max max = new Max();
int m = max.findMax(nums);
System.out.println(m);
}
}