模板设计模式
需求:
测试ArrayList和LinkedList的添加效率
public class AppTest {
public static void main(String
[] args
) {
System
.out
.println("开始");
long start
= System
.currentTimeMillis();
List
<Integer> list
= new ArrayList<Integer>();
for (int i
= 1; i
<= 1000000; i
++) {
list
.add(0,1);
}
long end
= System
.currentTimeMillis();
System
.out
.println("结束: "+(end
- start
));
}
}
此时,每次要测试的代码发生变化时, 都势必修改原有的代码
例如:
我现在测试ArrayList的添加效率然后又测试一下LinkedList的添加效率再然后我又要再次测试一下ArrayList的添加效率 那么又要把之前的代码写回来!
使用方法"模板模式",解决这个问题步骤:
定义一个抽象类写一个模板方法, 然后模板方法里面写不变的内容然后定义一个抽象方法把这个抽象方法,放在这个不变内容中,需要变化的位置然后具体这个需要变化的如何实现,就定义多一个类去继承这个抽象类就行了
abstract class Template {
public void template() {
System
.out
.println("开始");
long start
= System
.currentTimeMillis();
code();
long end
= System
.currentTimeMillis();
System
.out
.println("结束: "+(end
- start
));
}
public abstract void code();
}
class A extends Template {
@Override
public void code() {
List
<Integer> list
= new LinkedList<Integer>();
for (int i
= 1; i
<= 1000000; i
++) {
list
.add(0,1);
}
}
}
class B extends Template {
@Override
public void code() {
List
<Integer> list
= new ArrayList<>();
for (int i
= 1; i
<= 1000000; i
++) {
list
.add(0,1);
}
}
}
public class AppTest {
public static void main(String
[] args
) {
Template t
= new A();
t
.template();
}
}
如果我们需要改变只需要改变new A 或者 new B就行了也可以扩展多个别的类