模板模式:
解决某类事情的步骤有些是固定的,有些是会发生变化的,那么这时候我们可以为这类事情提供一个模板代码,从而提高效率
模板模式的步骤:
1.先写出解决该类事情其中的一件的解决方案
2.分析代码,把会发生变化的代码抽取出来独立成一个方法,把该方法描述成一个抽象的方法
3.使用final修饰模板方法,防止别人重写你的模板方法
//需求:编写一个计算程序运行时间的模板
abstract class MyRuntime{
public final void getTime(){
long startTime = System.currentTimeMillis();//记录开始的时间
code();
long endTime = System.currentTimeMillis();//记录结束时间
System.out.println("运行时间是:"+(endTime-startTime));
}
public abstract void code();
}
public class Demo4 extends MyRuntime{
public static void main(String[] args) {
Demo4 d = new Demo4();
d.getTime();
}
//code方法内部就写要计算运行时间的代码
public void code(){
for(int i = 0 ;i<100;i++){
System.out.println("i="+i);
}
}
}
清除重复元素:
import java.util.Arrays;
/*
* 需求:目前有数组int [] arr = {11,2,4,2,10,11};
* 定义一个函数清除该数组的重复元素,返回的数组存储了那些非重复的元素,而且不准浪费长度
*/
public class Demo5 {
public static void main(String[] args) {
int [] arr = {11,2,4,2,10,11};
arr = clearRepeat(arr);
System.out.println("清除重复元素的数组:"+Arrays.toString(arr));
}
public static int[] clearRepeat(int [] arr){
//先计算出重复元素的格式:
int count = 0;//记录重复元素的个数,计数器
for(int i = 0 ;i<arr.length-1;i++){
for(int j = i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
count++;
//break是防止重复记录重复元素
break;
}
}
}
System.out.println("重复元素的个数:"+count);
//新数组的长度
int newLength = arr.length-count;
//创建一个新数组
int [] newArr = new int[newLength];
//新建一个下标用于存储,不然清除重复元素后,不知道该把值赋给新数组中的哪一位,一定放在循环外
int index = 0;
//遍历旧数组,将旧数组的值赋给新数组
for(int i = 0;i<arr.length;i++){
//新建一个Boolean值用于判断赋给新数组中有没有重复元素.默认为无重复元素
Boolean flag = false;
//遍历新数组,判断赋给新数组中有没有重复元素
for(int j = 0;j<newArr.length;j++){
//如果两数相等,则说明重复了,跳出该循环。
if(arr[i]==newArr[j]){
flag = true;
break;
}
}
if(flag==false){
newArr[index++]=arr[i];
}
}
return newArr;
}
}