java中大概有21种设计模式,先看第一种,模版方法设计模式。
从一个简单的例子引出模版方法设计模式:
用for、while、do-while三种循环分别测出1到100的和;
一般的写法是:
public class Test{
pubic static void main(String[] args){
//for循环
long start = System.currentTimeMillis();
int sum = 0;
for(int i = 1; i <=100 ; i++){
sum += i;
}
System.out.println(sum);
long end = System.currentTimeMillis();
System.out.println(end-start);
//while循环
long start = System.currentTimeMillis();
int sum = 0;
for(int i = 1; i <=100 ; i++){
sum += i;
}
System.out.println(sum);
long end = System.currentTimeMillis();
System.out.println(end-start);
//do-while循环同上,此处省略
同样do-while也是同样的循环,这样除了循环体在变,其实其余的代码都没有变,这个时候就可以用模版方法设计模式将变化的代码和不变的代码分离开了。
先看下面的代码:
import java.util.*;
abstract class Template{
private String name;
Template(String name){
this.name = name;
}
public abstract void code();
public long test(){
System.out.print(name + "测试:");
long start = System.nanoTime();
code();
long end = System.nanoTime();
return end - start;
}
}
class ForTest extends Template{
ForTest(String name){
super(name);
}
public void code(){
int sum = 0;
for(int i = 1; i <= 100; i++){
sum += i;
}
System.out.print(sum + ";用时:");
}
}
class WhileTest extends Template{
WhileTest(String name){
super(name);
}
public void code(){
int sum = 0;
int i = 1;
while(i <= 100){
sum += i;
i++;
}
System.out.print(sum + ";用时:");
}
}
class DoWhileTest extends Template{
DoWhileTest(String name){
super(name);
}
public void code(){
int sum = 0;
int i = 1;
do{
sum += i;
i++;
}while(i <= 100);
System.out.print(sum + ";用时:");
}
}
public class Test{
public static void main(String[] args){
ForTest ft = new ForTest("for循环");
WhileTest wt = new WhileTest("while循环");
DoWhileTest dwt = new DoWhileTest("do-while循环");
System.out.println(ft.test() + "纳秒");
System.out.println(wt.test() + "纳秒");
System.out.println(dwt.test() + "纳秒");
}
}
输出结果如下:
将相同的代码都放在Template类里,将要变化的代码,写在单独的子类里,去继承Template类,在Template类里,将要变化的代码抽象成一个code()方法,子类再去访问
这里只一个模版方法的一个小小的例子,后续再完善,去做一些稍复杂的事情,欢迎指教!!